iOS从另一个类更新ViewController UILabel

时间:2013-03-24 22:35:27

标签: ios iphone objective-c uiviewcontroller uilabel

我是刚接触开发的人,一直在撞墙试图解决这个问题,我敢肯定,我错过了一些愚蠢的事情,但在尝试了各种不同的解决方案后,我仍然无法得到结果我在寻找。

我希望能够从另一个类更新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

3 个答案:

答案 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在这里未初始化。但即使你之后分配并初始化它,你也不会得到你想要更新其视图的活动视图控制器,而只是更新另一个视图控制器实例。