通过视图控制器(使用segues)xcode传递数据的问题

时间:2014-12-06 21:58:12

标签: ios objective-c xcode

我是Objective-C Xcode的新手,我试图创建一个基本应用程序,它接收用户输入的信息以在第二个视图控制器上显示它。我有一个push(deprecated)到ViewControllerTwo的按钮标识符为“calButtonPressed”但我希望它在ViewControllerTwo上的标签上显示 float BAC。标签只是说什么,但它确实转到下一个ViewController。它在代码中也没有错误。我该怎么做才能解决这个问题?谢谢:))

ViewController.m上的代码

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if([segue.identifier isEqualToString:@"calButtonPressed"])
    {
        ViewControllerTwo *vc2 = (ViewControllerTwo *)segue.destinationViewController;
        vc2.lblBAC.text = [[NSString alloc] initWithFormat:@"%f", BAC];
    }
}

ViewController.h上的代码

@property (strong, nonatomic) IBOutlet UILabel *lblBAC;

2 个答案:

答案 0 :(得分:2)

在ViewCongtrollerTwo中,添加一个属性来保存文本,直到加载视图为止。

@interface ViewControllerTwo () 

@property (strong, nonatomic) NSString *textFromlblBAC;

@end

在prepareForSegue中使用它:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

if([segue.identifier isEqualToString:@"calButtonPressed"])
{
    ViewControllerTwo *vc2 = (ViewControllerTwo *)segue.destinationViewController;
    vc2.textFromlblBAC = [[NSString alloc] initWithFormat:@"%f", BAC];
}

然后在ViewCongtrollerTwo中,只有在创建文本字段并加载视图后,才将此值复制到标签文本字段中。

- (void)viewDidLoad
{
    [super viewDidLoad];

    viewControllerTwoLabel.text = self.textFromlblBAC;
}

答案 1 :(得分:1)

您无法设置lblBAC,因为vc2的视图尚未加载。相反,在vc2上声明一个字符串属性,在prepareForSegue中设置它,然后在vc2的viewDidLoad中将lblBAC.text设置为该属性。