Xcode目标C - 从另一个类更改UILabel文本

时间:2017-03-12 08:05:38

标签: objective-c xcode uilabel iboutlet

我有2个viewcontrollers,vc1和vc2。

vc1有一个UILabel。 vc2有一个UIButton。当在vc2上单击按钮时,我希望vc1的uiLabel上的文本发生变化。我该怎么做?

vc1.h

@interface vc1 : UIViewController

@property (strong, nonatomic) IBOutlet UILabel *textLabel;

@end

vc1.m

@interface vc1 ()

@end

@implementation vc1

@synthesize textLabel = _textLabel; 

@end

vc2.m

#import "vc2.h"
#import "vc1.h"

@interface vc2 ()

@end

@implementation vc2

- (IBAction)onClick:(id)sender {

    vc1 *vc1Object = [[vc1 alloc] init];  //create object

    vc1Object.textLabel.text=@"New Text";  //set new text 
}

我的上述代码不起作用,因为它创建了一个新实例,而不是访问原始属性。但是,我不知道如何为IBOutlets创建getter / setter,或者是否有其他方法。如何从第二个viewcontroller更改UIlabel上的文本?

任何帮助将不胜感激。提前谢谢。

1 个答案:

答案 0 :(得分:0)

  

vc2.m文件

  • 首先在 #import" VC2.h" 之后声明VC2 Class对象,如下所示:

    VC2 *sharedInstance;
    
  • 在vc2.h文件中声明以下方法和变量。

    @property NSString *msg;
    +(VC2 *)sharedLogger;
    
  • 然后在vc2.m文件中添加以下代码行

    +(instancetype)sharedLogger
    {
         static VC2 *vc2 = nil;
         static dispatch_once_t oncePredicate;
    
         dispatch_once(&oncePredicate, ^{
             vc2 = [[self alloc] init];
         });
    }
    
    - (IBAction)onClick:(id)sender {
           [VC2 sharedLogger].msg = @"New Text";
    }
    
  

vc1.m文件

  • 首先导入标头文件

     #import "VC2.h"
    
  

在viewDidLoad()

中编写代码
   - (void)viewDidLoad {
       [super viewDidLoad];
       _textLabel.text = [VC2 sharedLogger].msg;
}