Как передать значения между представлениями в popViewControllerAnimated? - PullRequest
1 голос
/ 16 июля 2011

Я хочу знать, как передавать значения между представлениями в popViewControllerAnimated.

Вот мой сценарий: у меня есть представление, которое содержит табличное представление при выборе ячейки, мы идем в другое представление, где мне нужно ввести значениетекстовое поле и я нажимаю кнопку, чтобы вернуться к предыдущему представлению, где мне нужно отобразить значение текстового поля в ячейке табличного представления.

Как я могу это сделать?

Это то, что я сделал:

NewContact *nc = [[NewContact alloc] initWithNibName:@"NewContact" bundle:nil];
// ...
// Pass the selected object to the new view controller.
nc.name=[firstName text];
//[self.navigationController pushViewController:nc animated:YES];
[self.navigationController popViewControllerAnimated:YES];
[nc release];  

Ответы [ 4 ]

4 голосов
/ 11 июня 2012

В ViewControllerB объявите делегата и установите действие для popViewControllerAnimated:

@interface ViewControllerB : UIViewController {
    id delegate;
}

@property (nonatomic, retain) id delegate;

@synthesize delegate;

- (id) init ... {
    self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back"
                                                                              style:UIBarButtonItemStyleBordered
                                                                             target:self
                                                                             action:@selector(didBack:)] autorelease];
}

- (void) didBack:(id)sender {
    if ([delegate respondsToSelector:@selector(setProperty:)]) { 
        [delegate setProperty:property];
    }
    [self.navigationController popViewControllerAnimated:YES];
}

В ViewControllerA укажите функцию для установки локального свойства и установите делегата:

ViewControllerB controllerB = [[ViewControllerB alloc] init...];
[controllerB setDelegate:self];
[self.navigationController pushViewController:controllerB animated:YES];
[controllerB release];
1 голос
/ 16 июля 2011

Вы можете использовать для этого NSNotificationCenter, передавая объект вместе с вызовом.

Howto: Отправлять и получать сообщения через NSNotificationCenter в Objective-C?

1 голос
/ 16 июля 2011

Вам необходимо сохранить значение в одной из глобальных переменных, например, вы можете объявить в файле appDelegate.См. этот пост для этого

Если вы используете UITextField, вы можете сохранить значение в указанной выше переменной из UITextField в методе ниже делегата.

- (BOOL)textFieldShouldReturn:(UITextField *)textField;

Надеюсь, эта помощь.

0 голосов
/ 16 июля 2011

На основании ваших требований в вашем комментарии,

Допустим, вы переходите от ViewControllerA к экземпляру ViewControllerB и хотите вызывать методы ViewControllerA, вы можете сделать это следующим образом:

ViewControllerA * viewControllerA = (ViewControllerA *)self.parentViewController.
[viewController methodToCall];

Чтобы использовать это для удовлетворения требования в вопросе, вы можете использовать свойство.

viewControllerA.name = firstName.text; // Bits from your code snippet

Однако в табличном представлении я ожидаю, что у вас будет изменяемый массив для питания источника данных. Вы можете ссылаться на него, предполагая, что это свойство.

[viewControllerA.dataSourceArray addObject:firstName.text];
...