2011-04-13 87 views
0

所以我有一個名爲「TopNewsViewController」的ViewController類。它從RootViewController被推送到NavigationController堆棧。使用UIPopOver導航不同的視圖

在TopNewsViewController中,我點擊一個按鈕彈出一個彈出窗口。它顯示來自PopOver的表格視圖。

現在,在PopOver中的tableView:didSelectRowAtIndexPath方法中,我希望它修改TopNewsViewController的某些屬性並將其重新推送到導航堆棧。我採取的方法如下:

TopNewsViewController *topNewsViewController = [[[TopNewsViewController alloc] initWithNibName:@"TopNewsViewController" bundle:nil] autorelease]; 

NSString *feedStr = [rootViewController.feeds objectAtIndex:rowNumber]; 
[rootViewController release]; 
NSArray *thisFeed = [NSArray arrayWithObjects:feedStr, nil]; 
topNewsViewController.feeds = thisFeed; 
topNewsViewController.pageTitle = [categories objectAtIndex:rowNumber]; 
[self.navigationController pushViewController:topNewsViewController animated:YES]; 
[tableView deselectRowAtIndexPath:indexPath animated:YES]; 

我意識到,這並不工作,因爲我使用「self.navigationController」,當酥料餅是不是一個視圖控制器,而是爲一個UITableViewController。我嘗試做「topNewsViewController.navigationController」,而不是它的工作。

任何人有任何建議如何實施它?非常感謝幫助/建議!

回答

1

如果我正確理解你,我認爲你最好的選擇是在你的popover的UITableViewController中實現一個委託,這樣當選擇一條記錄時,它會調用委託方法將選擇交還給你的RootViewController 。 RootViewController然後會處理推送和彈出你想要使用的任何新的TopNewsViewController。你在這裏創建的新的TopNewsViewController默認沒有導航控制器,這就是爲什麼它不起作用。

所以,你的根視圖控制器成爲你的彈出窗口視圖控制器的代表...當選中某行時,它會顯示「popOver:didSelectRow:」,然後RootViewController會關閉彈出窗口並「做正確的事情」(tm )。

+0

哦 - 你是對的。但是,我將如何實現我的RootViewController作爲「委託」?在我的popover視圖控制器中實例化一個RootViewController對象?像這樣:RootViewController * rootViewController = [[RootViewController alloc] initWithNib ....? – darksky 2011-04-14 16:44:57

+0

請參見:[如何在Objective-C中創建委託](http://stackoverflow.com/questions/626898/how-do-i-create-delegates-in-objective-c) – 2011-04-14 16:50:58

+0

所以我在popoverviewcontroller中創建了這個: '@protocol PopOverDelegate @required - (void)didSelectRow:(NSUInteger)row; @ end' and in tableView:didSelectRowAtIndexPath:in the implementation我有: 'NSUInteger rowNumber = [indexPath row]; [[self delegate] didSelectRow:rowNumber]; [tableView deselectRowAtIndexPath:indexPath animated:YES];' 但didSelectRow沒有被調用(做了一些調試)。我是否錯誤地創建協議? – darksky 2011-04-15 02:12:27