在我的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次。我第一次点击这一行没有任何反应。
到目前为止的观察:
即使我只点击一次,似乎“预定”了完成块。但解雇不会发生。
有谁知道造成这个问题的原因是什么?
答案 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
这解决了我的问题。