1

У меня есть текстовое поле в моем контроллере главного представления. И я использую FPPopover, чтобы отобразить другой контроллер представления поверх моего главного контроллера. Я хочу получить имя пользователя от FPPopoverController и поместите текстовое поле в мой мастер-контроллер. Я пробовал следующие, но не работал.Обновление UITextField из другого ViewController iOS

MasterViewController *vc = [[MasterViewController alloc] init]; 
    vc.nameTextField.text = self.nameField.text; 


    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil]; 
    MasterViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"MasterViewController"]; 

    vc.nameTextField.text = self.nameField.text; 

Что еще я могу попробовать? Спасибо.

ответ

1

Делегирования является лучшим способом я думаю, но Самый простой способ - использовать уведомления.

реализация MyPopoverViewController

- (void)doneButtonPressed:(id)sender{ 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"notification" 
                 object:self 
                 userInfo:@{@"aKey":self.textfield.text} ]; 
} 

В вашей основной вид контроллера метод viewdidload

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(updateTextField:) 
              name:@"notification" 
              object:nil]; 

и, наконец, добавить этот метод ..

- (void)updateTextField:(NSNotification *)notification { 
    self.nameTextField.text = [notification.userInfo objectForKey:@"aKey"]; 
} 
+0

Не забудьте удалить слушателя, чтобы не допустить, чтобы контроллер popover al ive (сохраняется). – Daniel

1

Я бы просто использовал делегацию здесь. Например, вы можете настроить простой протокол, контроллер вашего popover должен иметь делегат, который может быть вашим основным контроллером представления, вы реализуете метод протокола на главном контроллере представления.

При создании контроллера поповер, убедитесь, что вы назначаете главный контроллер представления в качестве делегата для этого контроллера, например:

Протокол:

@protocol MyPopoverDelegate <NSObject> 

@required 
- (void)popoverDidFinishTypingName:(MyPopoverViewController *)myPopover; 

@end 

Главный контроллер Вид:

- (void)popoverDidFinishTypingName:(MyPopoverViewController *)myPopover{ 
    self.nameTextField.text = myPopover.textField.text; 
    // dismiss the popover here. 
} 

MyPopoverViewController header:

@interface MyPopoverViewController 

@property(weak) id<MyPopoverDelegate> delegate; 
@property(weak) UITextField *textField; 

@end 

MyPopoverViewController Отрывок реализации:

@implementation MyPopoverViewController 

- (void)doneButtonPressed:(id)sender{ 
    if(!self.delegate) 
     return; 
    [self.delegate popoverDidFinishTypingName:self]; 
} 

@end 

При создании поповера из главного контроллера представления вы должны установить себя в качестве делегата:

MyPopoverDelegate *popoverController = [[MyPopoverDelegate alloc] init]; 
popoverController.delegate = self; 
[...] 
+0

Великий .. спасибо .. –

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