从另一个ViewController iOS更新UITextField

时间:2013-06-02 00:26:06

标签: ios objective-c uiviewcontroller uistoryboard data-sharing

我的主视图控制器中有一个文本字段..我正在使用FPPopover在我的主视图控制器上显示另一个视图控制器..我想从FPPopoverController获取用户名并放入在我的主视图控制器中的文本字段中。我尝试了以下但没有工作..

 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;

我还能尝试什么? 感谢。

2 个答案:

答案 0 :(得分: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标头:

@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;
[...]

答案 1 :(得分: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"];
}