2013-11-11 5 views
0

Предположим, у нас есть 2 контроллера вида с именем ViewControllerA и ViewControllerB.Как передавать данные между двумя контроллерами представлений в раскадровки?

У меня есть следующий механизм инициализации, когда я не использовал раскадровку.

//ViewControllerA.h

@interface ViewControllerA : UIViewController 

@end 

//ViewControllerA.m

@implementation ViewControllerA 

- (IBAction)showViewControllerB:(id)sender { 
    ViewControllerB *vcB = [[ViewControllerB alloc] initWithTitle:@"Test"]; 
    [self.navigationController pushViewController:vcB animated:YES]; 
} 

@end 

//ViewControllerB.h

@interface ViewControllerB : UIViewController 

- (id)initWithTitle:(NSString *)title; 

@end 

//ViewControllerB.m

@interface ViewControllerB() 

@property (nonatomic, retain) NSString *title;//Private scope. 

@end 

@implementation ViewControllerB 

- (id)initWithTitle:(NSString *)title { 
    self = [self init]; 
    if(self) 
    { 
     _title = title; 
    } 
    return self; 
} 

@end 

Как достичь этого с помощью раскадровки без объявления свойства title в общедоступной области (ViewControllerB.h)?

Заранее спасибо.

+1

Что вы имеете в виду, когда говорите «** добиваетесь этого с помощью раскадровки **»? – Popeye

+0

@Popeye да, но без объявления свойства title ViewControllerB в файле .h. Он должен быть в .m файле (private scope), как указано в приведенном выше примере. –

+0

Ваш вопрос не совсем понятен. – Popeye

ответ

0
UIStoryboard *storyboard=self.storyboard; 

ViewControllerB *vc=(ViewControllerB*)[storyboard instantiateViewControllerWithIdentifier:@"Scene_Id"]; 

[vc setTitle:@"your Text"]; 

[self.navigationController pushViewController:vc animated:YES]; 
+0

Пожалуйста, проверьте мой вопрос, свойство title должно находиться в файле ViewControllerB.m, а не в .h файле (Private scope). –

2

Вы можете использовать KVC для доступа к свойству.

- (IBAction)showViewControllerB:(id)sender 
{ 
    ViewControllerB *viewcontroller = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerB"]; // corresponding to the storyboard identifier 
    [viewcontroller setValue:@"Hello World" forKey:@"title"]; 
    [self.navigationController pushViewController:viewcontroller animated:YES]; 
} 
0

Если вам действительно нужно, чтобы сохранить имущество частного вы можете прикрепить данные к vcB объекта с помощью objc_setAssociatedObject. Или вы можете сохранить свойство в AppDelegate вместо этого и извлечь его там, когда ViewControllerB инициализирует.

Смежные вопросы