我有ViewController
执行模型类型segue而另一个UITableViewController
来自底部,它有UITableView
中的类别。我希望当选择任何类别时,它必须将一些数据传回发送者控制器
答案 0 :(得分:2)
将第一个视图控制器设置为模式UITableViewController
的自定义委托,您可以在此方法中获得对第一个视图控制器中的UITableViewController
或UITableView
的引用, :
-(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];