如何从模型segue Table View Controller中获取数据?

时间:2012-10-05 10:08:17

标签: iphone ios uitableview uistoryboardsegue

我有ViewController执行模型类型segue而另一个UITableViewController来自底部,它有UITableView中的类别。我希望当选择任何类别时,它必须将一些数据传回发送者控制器

2 个答案:

答案 0 :(得分:2)

将第一个视图控制器设置为模式UITableViewController的自定义委托,您可以在此方法中获得对第一个视图控制器中的UITableViewControllerUITableView的引用, :

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

         myTableViewController.delegate = self;
     }
} 

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

How do I set up a simple delegate to communicate between two view controllers?

答案 1 :(得分:1)

如果这是您的用户可能会反复执行的操作而不会忽略该视图,那么您最好的选择可能是发布通知,让发件人注册以收听该通知。

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

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

在发件人中收听:

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

请记住适当地添加Observer和removeObserver,以免在不必要时进行观察。

如果用户选择然后取消视图,返回发件人视图,最好制作协议,将发件人设置为委托。基本上,在.h文件中创建一个协议,如下所示:

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

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

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

使发送视图符合协议:

 @interface sendingViewController : UIViewController <myControllerDelegate>

现在,当您完成编辑类别后,您可以在取消视图之前调用发件人的委托方法:

 [delegate myControllerFinishedEditingCategories:self];