2015-12-02 23 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

這解決了這個問題對我來說。

相關問題