2017-03-12 32 views
1

我有2個viewcontrollers,vc1和vc2。Xcode Objective C - 從另一個類更改UILabel文本

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 

    [email protected]"New Text"; //set new text 
} 

我上面的代碼不工作,因爲它是C ^重新創建一個新實例,而不是訪問原始屬性。但是,我不知道如何爲IBOutlets創建getter/setter,或者如果有其他方法。如何從第二個視圖控制器更改UIlabel上的文本?

任何幫助,將不勝感激。先謝謝你。

+1

你可以使用這個: - 1'NSNotificationCenter' 2.'KVO' 3.'Delegates' 4。 'Block' – pkc456

+0

你如何管理v1和v2?你是否從v2轉到v1?或者這個v1和v2是uiviewcontainers?或者您從v2發回v1 - 方法將會不同 – Nazir

+0

@ pkc456我最終使用NSNotificationCenter,感謝您的幫助! – hmzfier

回答

0

vc2.m文件

  • 首先聲明VC2類對象之後#進口 「VC2.h」如下:

    VC2 *sharedInstance; 
    
  • 申報下列方法和變在vc2.h文件中。

    @property NSString *msg; 
    +(VC2 *)sharedLogger; 
    
  • 再加入follwing的代碼行到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文件

  • 首次進口頭文件

    後在viewDidLoad中(
    #import "VC2.h" 
    

編寫代碼)

- (void)viewDidLoad { 
     [super viewDidLoad]; 
     _textLabel.text = [VC2 sharedLogger].msg; 
} 
相關問題