我只是iOS编程的新手。
我最近遇到了一个棘手的问题。场景是:我现在有一个UIViewController
(假设它被称为A)并且它包含一个容器视图,该容器视图包含UITableViewController
(让我们称之为B) 。当我在NSMutableArray
中按UIButton
时,我只想将UIViewController
从A传递到B.但是,由于embed segue的设计可以在UITableViewController's
加载后立即执行viewDidLoad
UIViewController
方法。
有没有人知道在这种情况下传递数据?只是想知道...
更新: [这两个VC的故事板] [1]
答案 0 :(得分:1)
任何原因你都不能简单地在prepareForSegue方法中传递它:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
switch segue.identifier {
case "tableViewController"?:
if let tableViewVC = segue.destinationViewController as? TableViewVC {
tableViewVC.myArray = passedArray
} ...
哦 - obj-c在伪代码中会是这样的:
- (void)prepareForSegue:(NSStoryboardSegue*)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"tableViewController"]) {
NSViewController *vc = [segue destinationController];
if ([vc isKindOfClass:[tableViewVC class]]) {
tableViewVC.myArray = passedArray;
没看到你的标签:]
编辑: 以下是通过通知的内容的粗略剖视图: 在你的UIViewController的头部声明:
#define nArrayReadyNotification @"ArrayReadyNotification"
在你的UIViewController的.m文件中,一旦发送了数组就发送通知:
[[NSNotificationCenter defaultCenter] postNotificationName: nArrayReadyNotification object:ARRAY];
在tableView的viewDidLoad中注册通知:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(arrayReceived:) name: nArrayReadyNotification object:nil];
这将是表视图中的arrayReceived方法:
- (void) arrayReceived:(NSNotification *)notificaiton {
NSArray *array = [notificaiton object];
if (array != nil) {
...
}
最后在dealloc中使用以下命令取消注册表视图:
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
这应该随时发送 - 也许是关闭计时器。 KVO虽然是我的偏好。
答案 1 :(得分:0)
ContainerView做3件事
[A.view addSubview:B.view]
[A addChildViewController:B]
[B didMoveToParentViewController:A]
如果你只想从A到B传递NSMutableArray,你可以这样做
UITableViewController *second = A.childViewControllers[0]
second.XXXXX = .....