故事板的问题

时间:2012-01-29 22:01:19

标签: objective-c ios storyboard

最近我开始使用storyboard,我遇到以下情况:我想从AppDelegate设置UILabel的文本。所以我创建了一个ViewController的实例

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard"
                                                             bundle: nil];

    ViewController *controller = (ViewController*)[mainStoryboard 
                                                       instantiateViewControllerWithIdentifier: @"mainViewController"];

    myViewController = controller;

    [window addSubview:myViewController.view];
    [window makeKeyAndVisible];

并从委托中调用以下方法

- (void) updateParameterLabel:(NSString *)parameter {

    NSLog(@"URL-2: %@", parameter);

    parameterLabel.text = parameter;
}

但该参数未在UI中显示。

另一种想法,这是一种策略:

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    NSLog(@"View did Appear");
}

“查看确实显示”会被记录两次......

任何提示?

此致 的Sascha

3 个答案:

答案 0 :(得分:2)

从应用程序委托中设置UILabel的文本并不是一个很好的设计。您的视图控制器应该管理您的视图内容,因此他们的名称。通常情况下,您的故事板会自动实例化,并且您不需要任何storyboardWithName代码,假设您正在使用Apple的默认模板。

也许考虑重新构建您的应用程序以更严格地遵循'模型 - 视图 - 控制器'模式,并考虑Apple如何自动实例化故事板(只需在XCode中创建一个新的故事板项目来查看)。

答案 1 :(得分:0)

如果您仍希望将其设为有效,请将UILabel设为viewcontroller的属性并使用

设置标签

代表:

- (void) updateParameterLabel:(NSString *)parameter {

    NSLog(@"URL-2: %@", parameter);
    [myViewController updateParemeter:parameter];
}

在myViewController中:

- (void) updateParameterLabel:(NSString *)parameter {

    NSLog(@"URL-2: %@", parameter);

    parameterLabel.text = parameter;
    [self.view setNeedsDisplay];//edit
}

因此,请使用viewController更新您的标签。当然,您需要property

中的viewController标签

答案 2 :(得分:0)

我看到你试图在标签出现之前更新标签,那你为什么不尝试在viewWillAppear中调用你的updateLabel方法,它会是这样的

-(void)viewWillAppear:(BOOL)animated{
 [self updateParameterLabel:@"Some Text"];
 [super viewWillAppear:YES];
}

updateParameterLabel必须在viewController中实现。