Вы можете получить свойство viewControllers
контроллера навигации и использовать его, возможно, так:
UILabel *label = ((SomeViewController *)[self.navigationController.viewControllers objectAtIndex:1]).myLabel;
Однако это не надежно. Поскольку «предыдущий» вид за пределами экрана, система может выгрузить его, чтобы освободить память. Тогда label
будет nil
.
Вы можете заставить этот другой контроллер представления перезагрузить свое представление (если оно было выгружено), получив доступ к свойству view
контроллера представления.
Но на самом деле это пахнет плохим дизайном. Вы почти никогда не должны пытаться получить доступ к представлениям контроллера представления, когда представление этого контроллера представления не на экране. Помните, как система может выгрузить представление контроллера представления, если представление находится вне экрана? Если некоторые UILabel
в этом представлении содержали единственную копию важных данных, эти данные теперь исчезли!
Любые важные данные должны храниться где-то , отличном , кроме представления - возможно, в свойстве контроллера представления или в объекте модели. Вы должны запросить у контроллера представления данные или объект модели, который содержит данные. Объекты представления контроллера представления почти всегда должны рассматриваться как частная деталь реализации контроллера представления, не доступная для других классов.
EDIT
Ваш вопрос озадачивает, потому что вы говорите о выталкивании ViewB
и возвращении к ViewA
, но ваш код только создает и нажимает ViewA
. ViewB
не упоминается в коде.
Я предполагаю, что ваш ViewA создает и толкает ViewB. Таким образом, вы должны присвоить ViewB
свойство типа ViewA
, например:
@class ViewA; // forward declaration to avoid circular imports
@interface ViewB
@property (weak, nonatomic) ViewA *aView;
Затем, когда ваш ViewA
создает экземпляр ViewB
, вы устанавливаете свойство aView
:
@implementation ViewA
- (void)pushViewB {
ViewB *bView = [[ViewB alloc] init];
bView.aView = self;
[self.navigationController pushViewController:bView animated:YES];
}
Теперь ваш ViewB
имеет доступ к ViewA
, который его создал, и может устанавливать свойства этого ViewA
.