美文网首页
问题记录 - 点击Cell弹提示框延迟

问题记录 - 点击Cell弹提示框延迟

作者: 岁变 | 来源:发表于2019-11-23 09:24 被阅读0次

    需求:点击tableview的Cell需要弹出一个系统的提示框

    问题: 发现提示框的出现会有延迟,但我没有任何延迟操作,这问题让我很是难受,排查了半天最后还是百度出了问题所在。

    问题代码:

        //MARK: - 系统登出
        static func logOut() {
            //获取当前VC
            let vc = UIViewController.currentViewController()
            if vc == nil {
                return
            }
            //弹出提示框
            let alertVC = UIAlertController(title: "提示", message: "是否退出登录", preferredStyle: .alert)
            let sureAction = UIAlertAction(title: "确定", style: .default) { [unowned vc] (_) in
                MBProgressHUD.showTextHUD("已登出")
                UserDefaults.removeAll()
                DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
                    vc?.navigationController?.popToRootViewController(animated: true)
                }
            }
            let cancelAction = UIAlertAction(title: "取消", style: .cancel, handler: nil)
            alertVC.addAction(sureAction)
            alertVC.addAction(cancelAction)
            vc?.present(alertVC, animated: true, completion: nil)
        }
    

    这是一个退出的提示框,在tableViewCell的点击方法中弹出。

    原因:cell的点击点击效果去除时就会出现这个问题。

    self.selectionStyle = .none
    

    当点击Cell时,UI的变化没有立刻的发生在主线程,而是经过一系列的操作之后在主线程刷新UI。

    解决方法:

    • 不用self.selectionStyle = .none,改用代理方法去除点击效果
    • 手动调起主线程进行UI刷新。
            DispatchQueue.main.async {
                vc?.present(alertVC, animated: true, completion: nil)
            }
    

    相关文章

      网友评论

          本文标题:问题记录 - 点击Cell弹提示框延迟

          本文链接:https://www.haomeiwen.com/subject/zsvqwctx.html