1

我有ViewController哪个执行模型类型 segue,另一个UITableViewController来自底部,它在UITableView. I want that when any of the category selected it must pass back some data to the sender controller

4

2 回答 2

2

将第一个视图控制器设置为 modal 的自定义委托UITableViewController,您可以在此方法中获取对第一个视图控制器中的UITableViewController或 的引用,如下所示:UITableView

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if([[segue identifier] isEqualToString:@"tableviewController"]){
         MyTableViewController *myTableViewController = (MyTableViewController *)[segue      destinationViewController];

         myTableViewController.delegate = self;
     }
} 

您将需要在表格视图控制器上设置委托回调等和属性。如果您还不知道,应该有很多关于如何做到这一点的指南,这里有一个

如何设置一个简单的委托来在两个视图控制器之间进行通信?

于 2012-10-05T10:47:01.937 回答
1

如果这是您的用户可能会在不关闭视图的情况下重复执行的操作,那么您最好的选择可能是发布通知,让发件人注册以收听。

要发布通知,请在更改类别时执行此操作:

 NSNotification *aNotification = [NSNotification notificationWithName:categoryChangedNotification object:categoryThatWasChanged];
[[NSNotificationCenter defaultCenter] postNotification:aNotification];

要在发件人中收听它:

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_refreshCategories) name:categoryChangedNotification object:nil];

记得适当地 addObserver 和 removeObserver 以免在不必要的时候被观察。

如果用户选择然后关闭视图,返回到发送者视图,你最好制定一个协议,将发送者设置为委托。本质上,在您的 .h 文件中创建了一个协议,如下所示:

 @protocol myControllerDelegate
      -(void)myControllerFinishedEditingCategories:(id)sender;
 @end

然后你需要在同一个控制器中的一个属性:

 @property (nonatomic, unsafe_unretained) id<myControllerDelegate> delegate;

使发送视图符合协议:

 @interface sendingViewController : UIViewController <myControllerDelegate>

现在,当您完成编辑类别后,您可以在关闭视图之前调用发送方的委托方法:

 [delegate myControllerFinishedEditingCategories:self];
于 2012-10-05T11:03:19.567 回答