如何将数据从父视图传递到子视图?

时间:2013-10-29 08:55:11

标签: ios ios7 uistoryboardsegue pass-data uicontainerview

我有一个容器视图,它使用storyboard embed segue来加载嵌入式静态表视图。 segue ID是'CONTAINER'。

当我运行以下代码时,prepareForSegue实际上从未被调用,因此没有数据从父代传递给子代码。

 - (void)viewDidLoad {
[super viewDidLoad];

if ([sGender isEqualToString:@"MALE"]) {
    containerGender = @"MALE";

    if ([containerGender isEqualToString:@"MALE"]){
        NSLog(@"MALE");
    }else{
        NSLog(@"BROKEN");
    } 
}
else if ([sGender isEqualToString:@"FEMALE"]) {
    containerGender = @"FEMALE";
}
}


-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"CONTAINER"]) {
    if([containerGender isEqualToString:@"MALE"]) {

        if ([containerGender isEqualToString:@"MALE"]){
            NSLog(@"MALE");
        }else{
            NSLog(@"BROKEN");
        } 


        SportTableViewController *tableView = segue.destinationViewController;
        tableView.sportGender = @"MALE";    
    }
    else if ([containerGender isEqualToString:@"FEMALE"]){
        SportTableViewController *tableView = segue.destinationViewController;
        tableView.sportGender = @"FEMALE";    
    }
}
}

我的问题是:

a)为什么没有调用prepareForSegue?故事板嵌入Segue的行为是否与标准序列不同?

b)是否有更好的方法将数据从容器视图传递到嵌入式表?

另外请忽略凌乱的实现/各种日志测试,只是我试图弄清楚什么是错误的。

2 个答案:

答案 0 :(得分:1)

我的问题实际上源于对容器视图如何加载其嵌入视图的误解。显然,这一切都发生在viewDidLoad之前。这意味着我将sGender转换为containerGender的时间太晚了。

我通过直接将sGender传递给嵌入视图来修复它。我以为我已经尝试过了,但昨天显然是一个缓慢的日子;)。

答案 1 :(得分:0)

你可以做到..

试 在childViewController中 设置 -

@property(nonatomic,retain)parentViewController * parent;

在ParentViewController集中

-

ChildViewController * child = [[childviewController alloc] init];   child.parent =自我;

它将在子视图中设置您的父类,您可以通过子视图控制器中的父对象获取数据。