我正在编写一个有趣的程序,在其中我有一个带有四个按钮的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];
myText
是NSString
变量,我希望将标签设置为。
一切似乎都井井有条,但标签不会改变它的文字。但是,如果我尝试在viewDidLoad函数中更改它的文本,它可以正常工作,所以我不知道发生了什么。
知道我可能需要什么吗?如果您需要更多信息,只需评论您想要的内容,我会尽力提供。
答案 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,这肯定有效。
干杯!