dismissViewControllerAnimated仅在第二次点击TableView Row后才有效

时间:2015-12-02 11:35:40

标签: ios objective-c uitableview

在我的iOS App中,我使用

呈现UItableViewController
...
[self presentViewController:vc animated:YES completion:nil];
...

现在我在tableview中点击一行后,我想解雇我的tableviewcontroller:

#pragma mark UITableViewDelegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self dismissViewControllerAnimated:true completion:^(void) {
        NSLog(@"dismissed");
    }];
}

现在我的问题: dismissViewControllerAnimated按预期工作,但我必须点击该行2次。我第一次点击这一行没有任何反应。

到目前为止的观察:

  • 我点了一次:没有任何事情发生
  • 我点了两次:TableviewController解散,“dismissed”被记录
  • 我点了一次,通过点击模态之外的某个位置来解雇Tableview:“dismissed”被记录

即使我只点击一次,似乎“预定”了完成块。但解雇不会发生。

有谁知道造成这个问题的原因是什么?

4 个答案:

答案 0 :(得分:5)

感谢par和ShahiM我得到了解决方案:我不得不在主线上解雇。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self performSelectorOnMainThread:@selector(dismissAndshowPdf) withObject:nil waitUntilDone:NO];
}

- (void) dismissAndshowPdf {
    [self.presentingViewController dismissViewControllerAnimated:true completion:^(void) {
         NSLog(@"dismissed");
    }];
}

答案 1 :(得分:1)

在解除控制器

之前调用deselectRowAtIndexPath

答案 2 :(得分:1)

正如@rmaddym所说,didSelectRowAtIndexPath:在主线程上被调用。神奇的是调用[self.presentingViewController dismissViewControllerAnimated:]而不是[self dismissViewControllerAnimated:]

答案 3 :(得分:0)

尝试将self.definesPresentationContext = true添加到UITableViewController

这解决了我的问题。