2017-03-12 8 views
1

私は2つのビューコントローラ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のゲッター/セッターの作成方法や、別の方法があるかどうかはわかりません。 UIlabelのテキストを2番目のviewcontrollerからどのように変更するのですか?

ご協力いただければ幸いです。前もって感謝します。

+1

あなたは、このいずれかを使用することができます - 1. 'NSNotificationCenter' 2.'KVO' 3.' Delegates' 4。 「ブロック」 – pkc456

+0

v1とv2をどのように管理していますか?あなたはv2からv1に向かいますか?またはこのv1とv2はuiviewcontainersですか?またはあなたがv2からv1に戻ってきます - 方法は異なっています – Nazir

+0

@ pkc456私はNSNotificationCenterを使用して終了しました、あなたの助けをありがとう! – hmzfier

答えて

0

vc2.mファイル

  • まず宣言しVC2のClassオブジェクト#importを以下のように "VC2.h"後:

    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ファイル

  • まずインポートヘッダファイル

    にコードの行をfollwing追加した後
    #import "VC2.h" 
    

のviewDidLoadでの書き込みコード()

- (void)viewDidLoad { 
     [super viewDidLoad]; 
     _textLabel.text = [VC2 sharedLogger].msg; 
} 
関連する問題