从另一个类(另一个ViewController)编辑UILabel

时间:2016-02-01 14:45:42

标签: ios objective-c

我想从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

}

// ....
你能帮助我吗?

我尝试了很多代码,但它仍然无法运行,我不知道问题出在哪里。

4 个答案:

答案 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是否为零。