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