从另一个类(另一个视图控制器)编辑 UILabel



我想从ViewController1编辑ViewContrller2中的UILabel。

这是我的代码,但它不起作用:

视图控制器1.m:

// ....
// In my viewDidLoad :
ViewController2 *vc = [[ViewController2 alloc]init];
// calling a function : 
[vc updateLabel];
// ....

视图控制器2.m:

// ....
-(void)updateLabel{
    self.MyLabel.text = @"Text";
    // MyLabel is already declared in ViewController2.h
}
// ....

你能帮我吗?

我已经尝试了很多代码,但它仍然不起作用,我不知道问题出在哪里。

无论对

错,为了实现这一目标,我可能会使用 NSUserDefaults 在视图控制器之间拉取信息。

视图控制器1

NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
[standardDefaults setObject:@"This is my Label" forKey:@"labelKey"];

视图控制器2

NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
MyLabel.text = [standardDefaults stringForKey:@"labelKey"]

答案已更新,以反映UIProgressView的修改问题,如下评论:

视图控制器1.m

NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
[standardDefaults setDouble:0.75 forKey:@"ProgressValue"]; //value you want your progress view to show

视图控制器2.h

。在此处为您的进度视图创建一个出口,并将其链接到IB

  @property (weak, nonatomic) IBOutlet UIProgressView *ProgressView;

视图控制器2.m

@synthesize ProgressView;

NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
double ProgressValue = [standardDefaults doubleForKey:@"ProgressValue"];
ProgressView.progress = ProgressValue;

您正在创建 ViewController2 类的新对象,如果要将此值设置为所有视图,则可以使用:-1-NSUserDefaults2-SQLite3 核数据查看如何在视图控制器之间传递数据:-在视图控制器之间传递数据

您正在创建新版本的 vc2,您需要访问已经存在的版本。 尝试改为共享对 vc1 中 vc2 控制器的引用

您还需要考虑是否应该直接从 vc1 更新它 - 您可以在 vc2 中刷新 viewDidLoad 上的标签

根据

您创建vc1和vc2的方式,有许多选项,这里有很好的优缺点描述 http://matteomanferdini.com/how-ios-view-controllers-communicate-with-each-other/

确保在调用updateLabel之前ViewController2调用ViewController2viewDidLoad方法,否则self.MyLabel将为 nil,因此您分配给self.MyLabel.text的任何内容都将毫无用处。现在,为了确保调用ViewController2viewDidLoad,您需要访问ViewController2的视图属性,因为第一次尝试访问控制器的视图时会调用视图控制器的viewDidLoad

一旦viewDidLoad你打算做的事情肯定会奏效。若要确认这确实是问题所在,请在 -(void)updateLabel 方法中保留一个断点并进行分析以查看self.MyLabel是否为 nil。

相关内容

最新更新