如何在两个不同的View Controller之间传递信息?

时间:2010-04-15 15:52:56

标签: iphone objective-c xcode viewcontroller

这是一个简单的问题:

我有两个不同的视图控制器,每个视图控制器都有自己的数据存储在.m文件中。 我想获取一个值,例如,在ViewController1中声明的整数值(int i=3;)并将其传递给ViewController2,因此我将能够在第二个视图控制器中使用该值。

有谁能告诉我怎么做?

3 个答案:

答案 0 :(得分:2)

2014年编辑 - 如果有人发生这种情况,请不要听我的意见。 “更好的方式”确实是最好的方式。

好方法 - 在ViewController2上创建自己的initWithI方法

更好的方法 - 像往常一样创建ViewController2,然后将值设置为属性。

最佳方式 - 这是一种代码气味,您将数据与ViewController紧密耦合。请改用CoreData或NSUserDefaults。

答案 1 :(得分:1)

如果要在UINavigationController中嵌入ViewController1,这是一个非常常见的用例。在ViewController1内部,将此代码添加到要显示ViewController2的位置(例如,在一个操作中):

ViewController2 *controller = [[ViewController2 alloc] initWithNibName:<nibName> bundle:nil];
[controller setData:<your shared data>]; 
[self.navigationController pushViewController:controller animated:YES];
[controller release];

导航控制器将负责其余工作。

答案 2 :(得分:1)

使用值初始化新视图控制器。

- (id)initWithValue:(int)someValue {
    if (self = [super initWithNibName:@"MyViewController" bundle:nil]) {
        myValue = someValue;
    }
    return self;
}

然后从您的其他视图控制器(假设其他视图控制器由UINavigationController拥有)

- (void)showNextViewControler {
    MyViewController *vc = [[[MyViewController alloc] initWithValue:someValue] autorelease]
    [self.navigationController pushViewController:vc animated:YES];
}

和/或在初始化后执行此操作,创建一个允许您设置它的方法或属性。

- (void)setSomeValue:(int)newValue {
    myValue = newValue;
}

然后

- (void)showNextViewControler {
    MyViewController *vc = [[[MyViewController alloc] initWithNibName:@"Foo" bundle:nil] autorelease]
    [vc setValue:someValue]
    [self.navigationController pushViewController:vc animated:YES];
}