尝试解雇UIViewController时出现奇怪的问题

时间:2015-12-27 08:32:34

标签: ios objective-c xcode uitableview uiviewcontroller

我有一个UIViewController持有UITableView,我想在点击表格的单元格时忽略UIViewController。所以我实现了这个方法:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

在这个方法的内部,我打电话给:

[self dismissViewControllerAnimated:YES completion:nil];

出于某种原因,当我点击单元格时,应用程序会冻结,我需要再次单击以便UIViewController解除。我甚至在那里设置断点来检查它是否在第一次或第二次敲击时到达它,并且在第一次敲击它到达断点时,然后我点击继续执行,我需要再次点击。

有人在iOS上遇到此问题吗?

2 个答案:

答案 0 :(得分:1)

首先,您似乎使用didDeselectRowAtIndexPath代替didSelectRowAtIndexPath。确保使用 didSelect ... ,而不是 didDeselect ....

其次,它冻结是因为方法tableView:didSelectRowAtIndexPath:不在主线程上调用。您必须使用GCD在主队列中执行代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    dispatch_async(dispatch_get_main_queue(), ^{
        [self dismissViewControllerAnimated:YES completion:nil];
    });
}

答案 1 :(得分:1)

//  PLEASE TRY THIS.

[self.navigationController.popoverPresentationController];