操作表需要10秒以上才能显示

时间:2017-04-06 11:28:47

标签: ios swift uialertcontroller uiactionsheet

在我的应用程序中,我有表视图控制器。当用户在tableview的最后一行键入时,应显示操作表以要求注销。以下是此操作的代码:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        switch indexPath.row {
        case 0:
            //..
        case 1:
            //..
        case 2:
            //..
        case 3:

            let logOutMenu = UIAlertController(title: nil, message: "Are you sure want to logout?", preferredStyle: .actionSheet)

            let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)
            let logOutAction = UIAlertAction(title: "Log out", style: .default, handler: { (UIAlertAction) in
                print("sign out")
            })

            logOutMenu.addAction(cancelAction)
            logOutMenu.addAction(logOutAction)

            self.present(logOutMenu, animated: true, completion: nil)
        default: break

        }
    }

一切正常,但行动表有奇怪的行为。显示操作表大约需要10秒钟(甚至更长时间)。我在真实设备上也注意到了同样的行为。我做错了什么?

1 个答案:

答案 0 :(得分:7)

你必须在没有动画的索引路径上调用取消选择行,否则会同时出现两个动画,这会混淆并获得更长的时间

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    switch indexPath.row {
    case 0:
        //..
    case 1:
        //..
    case 2:
        //..
    case 3:

        let logOutMenu = UIAlertController(title: nil, message: "Are you sure want to logout?", preferredStyle: .actionSheet)

        let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)
        let logOutAction = UIAlertAction(title: "Log out", style: .default, handler: { (UIAlertAction) in
            print("sign out")
        })

        logOutMenu.addAction(cancelAction)
        logOutMenu.addAction(logOutAction)

        self.present(logOutMenu, animated: true, completion: nil)
       // Deselect your row it will fix it
       tableView.deselectRow(at: indexPath, animated: false)
    default: break

    }
}