2015-12-02 12 views
4

在我的iOS应用后才能正常运行,我提出一个UITableViewController使用dismissViewControllerAnimated攻的TableView行第二次

... 
[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次。我第一次点击这一行没有任何反应。

观察至今:

  • 我点击一排一次:什么也没有发生
  • 我挖掘连续2次:TableviewController驳回,“开除”被记录
  • 我点击一排一次并通过点击模式外的某个地方点击桌面视图:“解雇”获取日志记录

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

有谁知道是什么原因导致此问题?

+0

听起来像didSelectRowAtIndexPath:是不是所有在第一次按下被调用?在行内是否有按钮或文本输入字段会拦截触摸事件? – par

+1

@par didSelectRowAtIndexPath:正在调用。我已经在那里放置了一个断点并对其进行了测试。 –

+0

是tableViewDelegate *呈现*视图控制器还是它的UITableViewController?你需要从呈现视图控制器调用dismissViewController所以尝试可能[self.presentingViewController dismissViewControllerAnimated ...] – par

回答

6

感谢par和ShahiM我得到了解决方案:我不得不解雇主线程。驳回控制器

+3

这是没有道理的,因为'didSelectRowAtIndexPath:'已经在主线程上被调用。 – rmaddy

0

呼叫deselectRowAtIndexPath。神奇的是在调用[self.presentingViewController dismissViewControllerAnimated:],而不是[self dismissViewControllerAnimated:]

1

正如@rmaddym说didSelectRowAtIndexPath:被称为主线程之前

- (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"); 
    }]; 
} 
0

尝试增加self.definesPresentationContext = trueUITableViewController

这解决了这个问题对我来说。

相关问题