1

我有一个 iPad 视图,它显示了一个模式表单,它本质上是一个“设置”视图。用户可以从那里转到特定设置。当模式视图被关闭时,我需要能够刷新主 iPad 视图。

-(void)refreshTable因此,当模式视图被解除时,我需要一个委托协议来调用。这不会是一个问题,除非当我呈现模态视图时,我需要分配的委托是从呈现的视图“推送”的视图。(截屏)

在此处输入图像描述

以下是我展示模态表单的方式:我将它封装在 UINavigationController 中,因为它需要推送其他视图。
(我只是在这里分配委托,但是带有协议的视图是从 AddView 推送的)NewAftpViewController是具有协议的视图控制器。

-(void)presentAddView:(id)sender {

    AddView *avc = [self.storyboard instantiateViewControllerWithIdentifier:@"add"];
    UINavigationController *navcont = [[UINavigationController alloc] initWithRootViewController:avc];
    navcont.modalPresentationStyle = UIModalPresentationFormSheet;
    [self presentViewController:navcont animated:YES completion:NULL];
}

这是我在推送视图中的协议:

@protocol RefreshAfterAddingNewAftpDelegate
-(void)refreshTable;
@end

@interface NewAftpViewController : UIViewController

@property (nonatomic, retain) id <RefreshAfterAddingNewAftpDelegate> refreshAfterAddingNewAftpDelegate;

@end
4

2 回答 2

2

我可以看到两种方法来做到这一点。您应该能够在您的帖子中获得对最左侧控制器的引用[self.navigationController presentingViewController]——您需要转换self.navigationController为任何类。然后在您的 中 NewAftpViewController,您可以像这样设置委托:

self.delegate = [(cast here)self.navigationController presentingViewController];

但这似乎违背了使用委托的目的——委托人不应该知道委托是什么类,但在这里你必须明确设置它。您可以直接调用该控制器上的方法,而不是使用委托。

我认为在这种情况下,更好的方法是使用NSNotification. 这对我来说似乎更干净,更简单。只需从 发布通知NewAftpViewController,并让您的第一个控制器监听它。

于 2012-12-16T19:08:52.863 回答
1

prepareForSeague推送下一个 View Controller 的方法中,您可以设置委托:

CustomController *controllerToPush = segue.destinationViewController;
controllerToPush.delegate = self.navigationController.parentViewController;

希望这可以帮助!

于 2012-12-16T19:55:38.633 回答