2017-03-12 4 views
1

Ich habe 2 Viewcontrollers, VC1 und VC2.Xcode Objective C - Ändern UILabel Text von einer anderen Klasse

vc1 hat ein UILabel. vc2 hat eine UIButton. Wenn die Schaltfläche auf vc2 geklickt wird, möchte ich den Text in vc1's uiLabel ändern. Wie mache ich das?

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 
} 

Mein obigen Code funktioniert nicht, weil es c ist Ermitteln einer neuen Instanz anstelle des Zugriffs auf die ursprüngliche Eigenschaft. Ich weiß jedoch nicht, wie man Getter/Setter für IBOutlets erstellt oder ob es einen anderen Weg gibt. Wie ändere ich den Text auf dem UIlabel vom zweiten Viewcontroller?

Jede Hilfe wäre willkommen. Vielen Dank im Voraus.

+1

Sie entweder dafür verwenden können: - 1. 'NSNotificationCenter' 2.'KVO' 3.' Delegates' 4. 'Block' – pkc456

+0

Wie verwalten Sie v1 und v2? gehst du von v2 zu v1? oder diese v1 und v2 sind uiviewcontainers? oder du sendest von v2 zu v1 zurück - die Methode wird anders sein – Nazir

+0

@ pkc456 Ich habe NSNotificationCenter benutzt, danke für deine Hilfe! – hmzfier

Antwort

0

vc2.m Datei

  • Erste Klasse VC2 Objekt nach # Import "VC2.h" wie unten deklarieren:

    VC2 *sharedInstance; 
    
  • Deklarieren folgende Verfahren und variablen in der Datei vc2.h.

    @property NSString *msg; 
    +(VC2 *)sharedLogger; 
    
  • dann nach Hinzufügen von Code in vc2.m Datei follwing Linie

    +(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 Datei

  • Ersteinfuhr Header-Datei

    #import "VC2.h" 
    

nehmen Code in viewDidLoad()

- (void)viewDidLoad { 
     [super viewDidLoad]; 
     _textLabel.text = [VC2 sharedLogger].msg; 
} 
Verwandte Themen