完成模态视图后重新加载UICollectionView

时间:2014-02-14 21:45:12

标签: ios objective-c uicollectionview presentmodalviewcontroller viewwillappear

我有一个UICollectionView。当用户点击某个项目时,视图上会出现一个模态表单窗口。当用户点击完成后,我想要调用[self.collectionView reloadData]或其他类似的东西。但是,viewWillAppear不适用于表单。知道如何让这个工作吗?

3 个答案:

答案 0 :(得分:1)

执行此操作的最佳方法是实现方法

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

。这种方法最好在协议中声明您的UICollectionView应该确认:

@protocol YourModalViewDelegate <NSObject>;

    @required
    -(void) closeModalView;

@end

如果要关闭自身,请在模态视图中调用此方法:

[delegate closeModalView];

其中delegate是模态视图中的属性:

@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];
}

答案 1 :(得分:0)

您应该在控制器上创建一个呈现新模态视图控制器的协议。然后,您可以在第二个视图控制器中按完成按钮时调用该方法。您可以在Xcode的Utility Application模板中找到如何创建此类协议的工作示例。您可以在Apple's programming guides中找到更多信息。

答案 2 :(得分:0)

Apple Dev论坛上有人帮助了我。以供参考: 把它放在CollectionView控制器中。 - (IBAction)formSheetWindowDoneButtonPressed:(UIStoryboardSegue *)sender {     [self.collectionView reloadData]; }

您可以更改方法的名称,但保持其余签名相同。现在,在故事板中,控制+从完成按钮拖动到该视图控制器的出口segue。这是视图底部的绿色框,箭头指向右侧。当您放开拖动时,您应该看到formSheetWindowDoneButtonPressed:作为选项。选择那个,你现在已经适当地链接了你的出口塞。按下完成后,将调用上面的方法并重新加载集合视图。