2015-02-10 72 views
1

我有一個ViewController上有一個按鈕。附圖中的參考#1。 現在單擊按鈕打開一個表視圖控制器作爲彈出窗口。附圖中的參考#2。 enter image description here如何根據表視圖控制器彈出窗口上的選擇更新父視圖

到目前爲止不錯。 現在我想要做的是點擊表格視圖中的一行,我想關閉彈出窗口並根據點擊的內容更新#1視圖控制器。

使用Segue Show從我不想要的屏幕底部重新加載整個視圖控制器。我只想彈出窗口關閉並查看更新。

嘗試重新創建類似於itune上的彈出窗口的流程。 enter image description here

我應該怎麼做?

回答

0

嘗試NSNotificationCenterdidSelectRowAtIndexPath發佈通知

[[NSNotificationCenter defaultCenter] postNotificationName:@"desiredEventHappend" object:nil]; 

和viewcontrollers viewDidLoad,加上觀察員

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(someThingInterestingHappened:) name:@"desiredEventHappend" object:nil]; 

,然後實現選擇

- (void)someThingInterestingHappened:(NSNotification *)info 
{ 
    NSLog(@"info : %@",info.userInfo); 
    //update view controller 
} 
+0

非常感謝Saif的回覆。這是做這件事的好方法。問題解決了。 – 2015-02-11 23:18:23

+0

我的快樂@KD – Saif 2015-02-12 05:36:07

0

在您添加到彈出窗口的表視圖控制器類中,添加一個屬性,其中包含要進行選擇時退出的塊。喜歡的東西:

@property (nonatomic,copy) void (^onSelect)(NSString *item); 

裏面的表視圖控制器,當一個項目被選擇的呼叫:

self.onSelect(<insert item selected>); 

我在這裏使用一個NSString但你可以使用任何東西。

如果您願意,您可以對錶中的單元格執行相同的操作,如果您希望單元格告訴表格,然後表格告訴創建它的代碼,可以在cellForRowAtIndexPath中設置塊。

在您主控制器(1)當您創建表視圖控制器簡單地做:

tableControllerYouCreated.onSelect=(NSString *itemSelected) { 
    <insert main view update code>  
}]; 

這將允許細胞點擊通知選擇,那麼它可以通知主視圖的表格。

您可以決定如何彈出表格彈出窗口作爲單獨的問題。

+0

謝謝Rory。我也會嘗試這個選項。 – 2015-02-11 23:21:20

+0

通知通常用於將後臺任務,操作系統更改或全局感興趣的其他更改傳遞給一個或多個感興趣的方。它通常不用於1:1接口布線,因爲您知道控制器之間的關係。隨着你的應用變得越來越複雜,我認爲你會發現這裏的直接編碼更易於管理。請注意,所有的Apple API和Pickers通常都是基於委託和完成處理程序的。它使用類似的機制開始編碼是很好的。 – 2015-02-12 11:16:59

0

還是在斯威夫特3。 ..

在didSelectRowAtIndexPath方法:

NotificationCenter.default.post(name: NSNotification.Name(rawValue: "desiredEventHappend"), object: nil) 

在的viewController/viewDidLoad中:

NotificationCenter.default.addObserver(self, selector: #selector(self.myFunction), name: NSNotification.Name(rawValue: "desiredEventHappend"), object: nil) 

,比FUNC。:

func myFunction(notification: NSNotification) { 
//do anything 
} 
0

如何用PopUp Swift ViewController更新XIB的Objective-c tableView。

在你彈出的ViewController: (在你想更新表的方法裏面)。你的Swift類。

NSNotificationCenter.defaultCenter().postNotificationName("NotificationIdf", object: nil) 
在父視圖控制器的viewDidLoad方法

:(對象 - C類)

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(reloadTable:) 
              name:@"NotificationIdf" 
              object:nil]; 

finaly定義父視圖控制器的功能:(對象 - C類)

-(void)reloadTable:(NSNotification*)noti { [self.tableView beginUpdates];[self.tableView endUpdates]; [self.tableView reloadData]; } 
相關問題