iOS从另一个类更新ViewController UILabel

我对发展很陌生,一直在抨击我的头,试图弄明白,我敢肯定,我错过了一些愚蠢的东西,但在尝试了各种不同的解决scheme之后,我仍然无法得到结果,寻找。

我想能够从另一个类更新一个ViewController的UILabel,这里是一个小的演示程序,我不能去工作,我有ViewController有两个UILabels,一个从viewDidDoad更新,另一个我想从ViewController调用的NewClass类中更新,我可以看到类被正确调用,因为控制台正在loggingNSLog条目,但我无法获得更新UILabel的语法。

提前致谢。

ViewController.h

  #import <UIKit/UIKit.h> @interface ViewController : UIViewController { UILabel *_labelupdate01; UILabel *_labelupdate02; } @property (nonatomic, retain) IBOutlet UILabel *labelupdate01; @property (nonatomic, retain) IBOutlet UILabel *labelupdate02; @end 

ViewController.m

 #import "ViewController.h" #import "NewClass.h" @interface ViewController () @end @implementation ViewController @synthesize labelupdate01; @synthesize labelupdate02; - (void)viewDidLoad { [super viewDidLoad]; labelupdate01.text = @"Update from ViewController"; [NewClass updatedisplay]; } @end 

NewClass.h

 #import <Foundation/Foundation.h> @class ViewController; @interface NewClass : NSObject @property (nonatomic, assign) ViewController *ViewController; + (void)updatedisplay; @end 

NewClass.m

  #import "NewClass.h" #import "ViewController.h" @implementation NewClass @synthesize ViewController = _ViewController; + (void)updatedisplay { NSLog(@"NewClass - updatedisplay"); ViewController *labelupdate02; labelupdate02.labelupdate02.text = @"Update from NewClass"; } @end 

像这样在newClass中定义这个

 + (void)updatedisplay:(ViewController *)vc { vc.labelupdate02.text=@"Update from NewClass"; } 

并从你的viewController调用它

 [NewClass updatedisplay:self]; 

首先,确保你在NewClass初始化ViewController ,然后你可以做任何你想要的。

 #import <Foundation/Foundation.h> @class ViewController; @interface NewClass : NSObject @property (nonatomic, assign) ViewController *aViewController; + (void)updatedisplay; @end 

在实施中

  #import "NewClass.h" #import "ViewController.h" @implementation NewClass + (void)updatedisplay { _aViewController.labelupdate02.text = @"Update from NewClass"; } @end 
 @property (nonatomic, retain) IBOutlet UILabel *labelupdate01; @property (nonatomic, retain) IBOutlet UILabel *labelupdate02; @property (nonatomic, assign) ViewController *aViewController; 

那么,从改变这些属性开始(非primefaces,弱)。 这是更正确的方法。 从MVC模式的模型类更新显示是不好的做法。 所以你的逻辑在+ (void)updatedisplay对我来说没有意义,我认为它应该是类似于+(NSString *) getStringToDisplayfunction隐含在function。 名称和标签的文本根据收到的string在vc代码中更新。

但只是以你问的方式回答你的问题:

正确的方法是按照build议的方式来做,或者在初始化过程中将viewcontroller传递给你的newclass实例,这样你的特定的viewcontroller已经被初始化了。

与大多数对象一样,您不能通过执行当前活动的viewcontroller:

  ViewController *labelupdate02; labelupdate02.labelupdate02.text = @"Update from NewClass"; 

labelupdate02在这里是未初始化的。 但即使你分配和初始化之后,你不会得到你想更新其视图的活动viewcontroller,而只是另一个viewcontroller实例。