我有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上的文本?
任何帮助将不胜感激。提前谢谢。
答案 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;
}