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 *) getStringToDisplay
function隐含在function。 名称和标签的文本根据收到的string在vc代码中更新。
但只是以你问的方式回答你的问题:
正确的方法是按照build议的方式来做,或者在初始化过程中将viewcontroller传递给你的newclass实例,这样你的特定的viewcontroller已经被初始化了。
与大多数对象一样,您不能通过执行当前活动的viewcontroller:
ViewController *labelupdate02; labelupdate02.labelupdate02.text = @"Update from NewClass";
labelupdate02在这里是未初始化的。 但即使你分配和初始化之后,你不会得到你想更新其视图的活动viewcontroller,而只是另一个viewcontroller实例。