2013-06-02 48 views
1

我在我的主视图控制器中有一个文本字段..而我正在使用FPPopover在我的主视图控制器上显示另一个视图控制器..我想从中获取用户的名称FPPopoverController并放在我的主视图控制器中的文本字段。我试过以下,但没有工作..从不同的ViewController更新UITextField 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控制器保持一致ive(保留)。 – Daniel

1

我只是在这里使用委托。例如,你可以设置一个简单的协议,你的弹窗视图控制器应该有一个可以作为你的主视图控制器的委托,你可以在主视图控制器上实现协议方法。

当您创建酥料饼的控制器,请确保您指定的主视图控制器作为该控制器例如委托:

协议:

@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

伟大的..谢谢你.. –

相关问题