2011-05-19 53 views
2

我在UINavigationController中有一個UITableView。在導航欄上我有一個名爲add的按鈕。當按下此按鈕時,它將顯示一個UIPopoverController,用戶可以在UITableView中輸入要添加爲新行/單元格的數據。我的問題是如何從UIPopover添加一個新的單元格到UITableView?我是否將陣列數據傳遞給UIPopOver根控制器?UIPopover和UITableView數據交換

+0

我想這將取決於你的表視圖的數據源。如果你在iPhone上使用模態視圖來做同樣的事情,它應該與iPad上的彈出窗口類似。 – BoltClock 2011-05-19 20:38:38

+0

是的,這將與模態觀點一樣..問題是如何?當你說它取決於數據源時,這是什麼意思?我希望能夠從popover中做insertRowsAtIndexPath ..這是主要目標。 – aherlambang 2011-05-19 20:48:17

回答

4

有兩種解決方案,我知道這一點。一種方法是將彈出通知發送到根控制器,並應用必要的代碼更新handleNotification方法中的tableView。

另一個我個人使用的是爲popover設置一個委託協議。你必須將其設置是這樣的:

@protocol PopoverDelegate 
- (void)addNewCell; // you can add any information you need to pass onto this if necessary such as addNewCellWithName:(NSString *)name, etc. 
@end 

@interface MyPopoverViewController..... { 
    id <PopoverDelegate> delegate; 
    // the rest of your interface code; 
} 
@property (nonatomic, retain) id delegate; 
// any other methods or properties; 
@end 

然後在你的根視圖控制器頭文件,你需要添加委託

@interface RootViewController .... <PopoverDelegate> { 

然後在你的根視圖控制器實現文件,在實例化時分配彈出窗口委託。例如:

MyPopoverViewController *vc = [[MyViewController alloc] init]; 
vc.delegate = self; // this is where you set your protocol delegate 
myPopover = [[UIPopoverController alloc] initWithContentViewController:vc]; 
myPopover.delegate = self; 
[vc release]; 

最後,你會在某個地方在代碼

- (void)addNewCell { 
    // do what you want with the tableView from here 
} 

對不起,這是一個有點長添加協議方法。我只是想確保我徹底。希望它有幫助