PerformSegueWithIdentifier不能始终如一地工作

时间:2015-11-05 07:54:51

标签: ios swift tableviewcell

我在我的项目中没有使用任何导航控制器。这个项目是在线获取的是Swift的侧边栏菜单。在侧边栏菜单中,有一个表格视图,每行将performSegueWithIdentifier

问题:

最初几次点击tableViewCell的工作方式就像一个魅力,只需点击一下即可解除菜单。但之后,需要双击tableViewCell才能关闭菜单。

需要两次点击才能解除菜单:(首先点击tableViewCell,viewController将消失,第二次点击tableViewCell将关闭菜单)

NavigationViewController(补充工具栏菜单)

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    self.snapshot.removeFromSuperview()
    var segueName: NSString = "";

    if (indexPath.row == 0) {
        print("ROW 1")
        segueName = "listview"

    }
    if (indexPath.row == 1) {
        print("CLICK ROW 2")
        segueName = "othernav"
    }

    self.performSegueWithIdentifier(segueName as String, sender: self)
}

故事板

enter image description here

资源来自here

1 个答案:

答案 0 :(得分:2)

尝试使用:

    dispatch_async(dispatch_get_main_queue(), {}); 

以下是关于" bug"的一些信息。但是我认为Apple修复了它......

http://openradar.appspot.com/19563577

您的代码应如下所示:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
self.snapshot.removeFromSuperview()
var segueName: NSString = "";

if (indexPath.row == 0) {
    print("ROW 1")
    segueName = "listview"

}
if (indexPath.row == 1) {
    print("CLICK ROW 2")
    segueName = "othernav"
}

dispatch_async(dispatch_get_main_queue(), {}); 
self.performSegueWithIdentifier(segueName as String, sender: self)
}

如果这不起作用,你可以试试这个:

替换

dispatch_async(dispatch_get_main_queue(), {}); 
    self.performSegueWithIdentifier(segueName as String, sender: self) 

with:

   NSOperationQueue.mainQueue().addOperationWithBlock {
              self.performSegueWithIdentifier(segueName as String, sender: self) }