如何在popViewControllerAnimated中的视图之间传递值?

时间:2011-07-16 14:07:49

标签: iphone objective-c cell tableview

我想知道如何在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 个答案:

答案 0 :(得分:4)

在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中,提供一个设置local属性的函数并设置delegate:

ViewControllerB controllerB = [[ViewControllerB alloc] init...];
[controllerB setDelegate:self];
[self.navigationController pushViewController:controllerB animated:YES];
[controllerB release];

答案 1 :(得分:1)

您需要将值存储在一个全局变量中,例如您可以在appDelegate文件中声明。请参阅this post了解

如果您使用的是UITextField,那么您可以在UITextField中将值存储在上面的变量中,位于下面的委托方法中。

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

希望得到这个帮助。

答案 2 :(得分:1)

你可以使用NSNotificationCenter来传递一个对象和呼叫。

Howto:Send and receive messages through NSNotificationCenter in Objective-C?

答案 3 :(得分:0)

根据您在评论中的要求,

假设您从ViewControllerA实例导航到ViewControllerB实例,并希望调用ViewControllerA的方法,您可以这样做,

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

要使用此功能来解决问题中的要求,您可以使用属性。

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

但是在表格视图中,我希望你有一个可变数组来支持数据源。你可以参考它,假设它是一个属性。

[viewControllerA.dataSourceArray addObject:firstName.text];