我想从ViewController1编辑ViewContrller2中的UILabel。
这是我的代码,但它不起作用:
ViewController1.m:
// ....
// In my viewDidLoad :
ViewController2 *vc = [[ViewController2 alloc]init];
// calling a function :
[vc updateLabel];
// ....
ViewController2.m:
// ....
-(void)updateLabel{
self.MyLabel.text = @"Text";
// MyLabel is already declared in ViewController2.h
}
// ....
你能帮助我吗?
我尝试了很多代码,但它仍然无法运行,我不知道问题出在哪里。
答案 0 :(得分:1)
正确或错误,要实现这一点,我可能会使用NSUserDefaults在视图控制器之间提取信息。
ViewController1
NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
[standardDefaults setObject:@"This is my Label" forKey:@"labelKey"];
ViewController2
NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
MyLabel.text = [standardDefaults stringForKey:@"labelKey"]
根据以下评论更新答案以反映UIProgressView的修正问题:
ViewController1.m
NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
[standardDefaults setDouble:0.75 forKey:@"ProgressValue"]; //value you want your progress view to show
ViewController2.h
... 在此处为您的进度视图创建一个插座,并将其链接到IB
@property (weak, nonatomic) IBOutlet UIProgressView *ProgressView;
ViewController2.m
@synthesize ProgressView;
...
NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
double ProgressValue = [standardDefaults doubleForKey:@"ProgressValue"];
ProgressView.progress = ProgressValue;
答案 1 :(得分:0)
您正在创建vc2的新版本,您需要访问已存在的版本。尝试在vc1中共享对vc2控制器的引用
您还需要考虑是否应该直接从vc1更新它 - 您可以在vc2中刷新viewDidLoad上的标签
根据您创建vc1&的方式,有很多选项可供选择。 vc2,这里有一个很好的利弊描述http://matteomanferdini.com/how-ios-view-controllers-communicate-with-each-other/
答案 2 :(得分:0)
您正在创建ViewController2类的新对象, 如果要将此值设置为可以使用的所有视图: - 1-NSUserDefaults的 2- SQLite的 3核数据 看看如何在视图控制器之间传递数据: - Passing Data between View Controllers
答案 3 :(得分:0)
确保在updateLabel
上调用ViewController2
之前调用viewDidLoad
的{{1}}方法,否则ViewController2
将为nil,因此您分配给self.MyLabel
{1}}将毫无用处。现在为了确保调用self.MyLabel.text
viewDidLoad
,您需要访问ViewController2
的视图属性,因为第一次查看控制器时会调用视图控制器的ViewController2
试图访问。
一旦viewDidLoad
,您打算做的事情肯定会有效。
要确认这确实是问题,请在viewDidLoad
方法中保留断点并分析以查看-(void)updateLabel
是否为零。