1

我有一個UICollectionView。當用戶點擊某個項目時,該視圖上會出現一個模式表單窗口。當用戶點擊完成後,我想打電話給[self.collectionView reloadData],或者做相同的事情。但是,viewWillAppear不適用於表單。任何想法如何讓這個工作?當用模態視圖完成時重新加載UICollectionView

回答

0

有人在蘋果開發論壇幫助我。作爲參考: 把它放在CollectionView控制器中。 (IBAction)formSheetWindowDoneButtonPressed:(UIStoryboardSegue *)sender {self.collectionView reloadData]; }

您可以更改方法的名稱,但保留簽名的其餘部分相同。現在,在故事板中,控制+從完成按鈕拖動到視圖控制器的退出隊列。這是視圖底部的綠色方框,箭頭指向右側。當你放開拖拽時,你應該看到formSheetWindowDoneButtonPressed:作爲一個選項。選擇一個,你現在已經適當地鏈接了你的Exit Segue。當他們按完成時,上面的方法被調用並且你的集合視圖被重新加載。

0

您應該在提供新模態視圖控制器的控制器上創建一個協議。然後,您可以在第二個視圖控制器中按完成按鈕時調用該方法。你可以找到一個如何在Xcode的Utility Application模板中創建這樣的協議的工作示例。你可以在Apple's programming guides找到更多的信息。

1

做到這一點,最好的辦法是實現方法

-(void) closeModalView { 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 
在UICollectionView

。這種方法是更好的協議,您UICollectionView應確認到申報:當你想關閉自己

@protocol YourModalViewDelegate <NSObject>; 

    @required 
    -(void) closeModalView; 

@end 

調用此方法模式的看法:

[delegate closeModalView]; 

,其中委託是一個屬性模式視圖:

@property (strong, nonatomic) id <YourModalViewDelegate> delegate; 

此屬性可能在UICollectionView用下面的方法進行設置:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"segueToModalViewIdentifier"]) { 
     YourModalViewClass *yourModalView = (YourModalViewClass *)[segue destinationViewController]; 
     [yourModalView setDelegate:self]; 
} 
+0

謝謝,但是當我點擊完成按鈕時,模式視圖不會關閉。 – user1941966

+0

你在使用'navigationController'嗎?如果是的話,你可以嘗試'[self.navigationController dismissViewControllerAnimated:YES completion:nil];' – nvl

+0

我正在使用navigationController,但這樣做並沒有改變。 – user1941966

相關問題