2013-06-23 49 views
0

我通過我的表視圖的代理類MyClass推送視圖控制器(DetailView)。 MyClass充當MasterView中表格視圖的代表。 Im試圖從MyClass的「didSelectRowAtIndexPath:」方法中推DetailView,但每次按下DetailView時,後退按鈕導致回到MasterView被禁用。導航欄上的「返回」按鈕在查看推送後被禁用

我推的視圖代碼:

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

if (!detailViewController) { 
    detailViewController = [[DetailViewController alloc] init]; 
} 

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
[appDelegate.navigationController pushViewController:detailViewController animated:YES]; 

} 

回答

0

相反的[appDelegate.navigationController pushViewController:detailViewController animated:YES];,使用[self.navigationController pushViewController:detailViewController animated:YES];

聽起來像appDelegate的導航控制器是與MasterView不同的實例,它可以解釋奇怪的行爲。

使用self.navigationController將另一個視圖控制器推到MasterView導航控制器的堆棧頂部。

+0

這是來自MyClass,因爲MyClass沒有繼承的導航控制器 – user2480176

0

聽起來像您需要將您的推送回到您的MasterView。

您可以通過在MyClass中設置協議並使用通知中心通過從MyClass到MasterView的代表(通過使用通知中心產生一個奇怪的來回委派模式)來觸發推回呼(可能會有用多個視圖需要知道這種推送正在發生),或者在初始化MyClass並將其用於推送時傳遞對MasterView的引用。

不管你選擇什麼,試圖使用AppDelegate的導航控制器將肯定會給你奇怪的結果。

+0

我喜歡NSNotificationCenter,但後退按鈕仍然消失... – user2480176

+0

您是否從MyClass發送NSNotification,然後在MasterView中監聽它?當你收到通知時,它應該像MasterView類中的Vinny的註釋一樣發佈。 '[self.navigationController pushViewController:detailViewController animated:YES]' – Stakenborg

+0

是的。當通知被MasterView捕獲時,將調用另一種方法,將視圖完全按如下方式推送。 – user2480176