我是刚接触开发的人,一直在撞墙试图解决这个问题,我敢肯定,我错过了一些愚蠢的事情,但在尝试了各种不同的解决方案后,我仍然无法得到结果我在寻找。
我希望能够从另一个类更新ViewController中的UILabel,这里有一个我无法工作的小型演示程序,我有一个ViewController有两个UILabel,一个是用{{更新的1}}和另一个我想从另一个名为NewClass的类更新,它从viewDidDoad
调用,我可以看到正在调用类正确,因为控制台正在记录ViewController
条目但是我无法获得更新NSLog
的语法。
提前致谢。
ViewController.h
UILabel
ViewController.m
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController {
UILabel *_labelupdate01;
UILabel *_labelupdate02;
}
@property (nonatomic, retain) IBOutlet UILabel *labelupdate01;
@property (nonatomic, retain) IBOutlet UILabel *labelupdate02;
@end
NewClass.h
#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.m
#import <Foundation/Foundation.h>
@class ViewController;
@interface NewClass : NSObject
@property (nonatomic, assign) ViewController *ViewController;
+ (void)updatedisplay;
@end
答案 0 :(得分:4)
在newClass中定义这个
+ (void)updatedisplay:(ViewController *)vc
{
vc.labelupdate02.text=@"Update from NewClass";
}
并从viewController中调用它
[NewClass updatedisplay:self];
答案 1 :(得分:1)
首先,请确保在ViewController
中初始化NewClass
,然后您可以随意使用它。
#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
答案 2 :(得分:0)
@property (nonatomic, retain) IBOutlet UILabel *labelupdate01;
@property (nonatomic, retain) IBOutlet UILabel *labelupdate02;
@property (nonatomic, assign) ViewController *aViewController;
好吧,首先将这些属性更改为(非原子,弱)。这是更正确的方法。在MVC模式中从一个模型类更新显示是不好的做法。因此,+ (void)updatedisplay
中的逻辑对我来说没有意义,我认为它应该类似于+(NSString *) getStringToDisplay
,其功能隐含在func中。名称和标签的文本根据收到的字符串以vc代码更新。
但只是以你问的方式回答你的问题:
正确的方法是在建议的过程中执行此操作,或者在初始化期间将viewcontroller传递给newclass实例,以便您的特定viewcontroller已经初始化。
与大多数对象一样,您无法通过执行以下操作来获取当前活动的viewcontroller:
ViewController *labelupdate02;
labelupdate02.labelupdate02.text = @"Update from NewClass";
labelupdate02在这里未初始化。但即使你之后分配并初始化它,你也不会得到你想要更新其视图的活动视图控制器,而只是更新另一个视图控制器实例。