2017-03-12 1 views
1

J'ai 2 viewcontrollers, vc1 et vc2.Xcode Objectif C - Modifier le texte UILabel d'une autre classe

vc1 a un UILabel. vc2 a un UIButton. Lorsque le bouton est cliqué sur vc2, je veux que le texte de uiLabel de vc1 change. Comment je fais ça?

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 
} 

Mon code ci-dessus ne fonctionne pas parce qu'il est c répéter une nouvelle instance au lieu d'accéder à la propriété d'origine. Cependant, je ne sais pas comment créer des getters/setters pour IBOutlets, ou s'il y a un autre moyen. Comment est-ce que je change le texte sur le UIlabel du deuxième viewcontroller?

Toute aide serait appréciée. Merci d'avance.

+1

Vous pouvez utiliser ceci: - 1. '' NSNotificationCenter' 2.'KVO' 3. Delegates' 4. 'Block' – pkc456

+0

comment vous gérez v1 et v2? allez-vous de v2 à v1? ou ce v1 et v2 sont uiviewcontainers? ou vous renvoyez de v2 à v1 - la méthode sera différente – Nazir

+0

@ pkc456 J'ai fini par utiliser NSNotificationCenter, merci pour votre aide! – hmzfier

Répondre

0

fichier vc2.m

  • d'abord déclarer VC2 objet classe après #import "VC2.h" comme ci-dessous:

    VC2 *sharedInstance; 
    
  • Declare méthode suivante et variable dans le fichier vc2.h

    @property NSString *msg; 
    +(VC2 *)sharedLogger; 
    
  • puis après ajout follwing ligne de code dans le fichier 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 Fichier

  • fichier d'en-tête Première importation

    #import "VC2.h" 
    

écrire du code dans viewDidLoad()

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