设置标签文本等于变量

时间:2014-02-03 02:55:23

标签: ios objective-c uilabel uistoryboard

我正在编写一个有趣的程序,在其中我有一个带有四个按钮的UIViewController,它们都将用户发送到另一个视图,但是根据按下的按钮,我希望标签在其他视图有不同的文字。为此,我决定将标签的文本设置为等于NSString变量,并根据按下的按钮将该变量设置为某个文本。所以我有这个:

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"resultScreen"];
[self presentViewController:vc animated:YES completion:nil];
_myLabel.text = [NSString stringWithFormat:myText];

myTextNSString变量,我希望将标签设置为。

一切似乎都井井有条,但标签不会改变它的文字。但是,如果我尝试在viewDidLoad函数中更改它的文本,它可以正常工作,所以我不知道发生了什么。

知道我可能需要什么吗?如果您需要更多信息,只需评论您想要的内容,我会尽力提供。

7 个答案:

答案 0 :(得分:1)

您无法从当前控制器更新其他控制器的UI - 您可以设置变量,稍后在viewDidLoad或viewWillAppear中您可以将这些值分配给UI

在File:FirstViewController.m

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
SecondViewController *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
vc.passedText = @"Hello Next";

[self.navigationController pushViewController:vc animated:YES];

在File:SecondViewController.h

@interface SecondViewController : UIViewController
@property (strong, nonatomic) IBOutlet UILabel *myLabel;

@property (strong, nonatomic) NSString *passedText;

在File:SecondViewController.m

-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:YES];

    self.myLabel.text = self.passedText;

}

答案 1 :(得分:0)

我认为您需要在调用:

之前设置ViewController的属性
[self presentViewController:vc animated:YES completion:nil];

如果在显示视图后进行设置,则必须手动刷新视图,这有点过分。只需在呈现视图之前设置它。所以它看起来像:

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
ResultScreenViewController *vc = (ResultScreenViewController *)[mainStoryboard instantiateViewControllerWithIdentifier:@"resultScreen"];
vc.customTitleLabel.text = [NSString stringWithFormat:myText];
[self presentViewController:vc animated:YES completion:nil];

在ViewController头文件中:

@property (nonatomic, strong) UILabel *customTitleLabel;

答案 2 :(得分:0)

首先使用自定义标签创建UIViewController的子类:

@interface NextViewController : UIViewController
@property (nonatomic, strong) UILabel* customLabel
@end

现在回到你的代码。您可以简单地将UIViewController转换为您创建的子类,以便可以访问查看控制器内的标签。

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
NextViewController* nextVC = (NextViewController*)[mainStoryboard instantiateViewControllerWithIdentifier:@"resultScreen"];
nextVC.customLabel.text = [NSString stringWithFormat:myText];
[self presentViewController:nextVC animated:YES completion:nil];

答案 3 :(得分:0)

好的,在其中一个答案的帮助下,我发现我的解决方案对我有用。之前,当我有

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"resultScreen"];
[self presentViewController:vc animated:YES completion:nil];
_myLabel.text = [NSString stringWithFormat:myText];

我没有意识到resultScreen没有链接到UIViewController,而是链接到ViewContronller。所以我需要做的就是将vc声明更改为

ViewController *vc = (ViewController *)[mainStoryboard instatiateViewControllerWithIdentifier:@"resultScreen:];

那么我需要做的就是在ViewDidLoad模块中更改标签的文本。它现在对我来说很好。

答案 4 :(得分:0)

简单..

if ([_mylabel.text isEqualToString: myText)
    {
        //--- Now process your method here. Show alert or what else you need
    }

答案 5 :(得分:0)

试试这个。我认为直接访问其他UIlabel UIViewController不是一个好方法。关注此&它肯定会奏效。

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
resultScreen *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"resultScreen"];
vc.strText = myText;
[self presentViewController:vc animated:YES completion:nil];

resultScreen视图控制器中创建NSString属性。

<强> resultScreen.h

@property (retain, nonatomic) NSString *strText;

<强> resultScreen.m

-(void)viewDidLoad
{
   self.myLabel.text = self.strText;
}

答案 6 :(得分:0)

您正在尝试在显示第二个视图之前设置labelText。 在视图加载到内存之前,它的所有出口都是零。 所以在第二个视图中使用NSString变量,并尝试设置该变量的值,然后在 viewWillAppear:方法将string变量的值赋给labelText,这肯定有效。

干杯!