Xcode - 从不同viewController中的textfield中检索值

时间:2014-06-11 15:45:13

标签: ios objective-c xcode

我有2个viewControllers(NewTicket1Controller和NewTicket2Controller)。视图1有一个名为' ticket'的文本字段。并且视图2想要访问该值。

以下是我在View 2中的代码。

NewTicket1Controller *screen1 = [[NewTicket1Controller alloc] init];
NSLog(@"%@", screen1.ticket.text);

上面的我的NSLog语句为票证文本字段值返回null。但它不是空的。如果我切换回视图1,我可以看到该字段中有一个值。

我可以不检索这样的变量吗?

4 个答案:

答案 0 :(得分:0)

当您实例化一个新的NewTicket1Controller时,它的所有属性都被初始化为它们的默认值。这并没有为您提供任何现有的NewTicket1Controller对象的引用。如果您正在使用故事板,则可以将其传递给prepareForSegue中的其他视图控制器,或者如果您不使用故事板,则可以在创建它时以编程方式将其传递给新视图控制器,假设它是从NewTicket1Controller创建的。 / p>

答案 1 :(得分:0)

无需初始化您的视图即可访问它。如果要将textfield中包含的文本发送到另一个视图..您需要将该票证文本字段值存储到其他视图控制器的字符串中。

在NewTicket2Controller中使用名称为ticketString的NSString获取属性并合成它...然后您可以使用该引用在NewTicket1Controller中存储票证的值

切换到NewT​​icket2Controller时按钮动作。在NewTicket1Controller上输入一些代码

NewTicket2Controller *screen2 = [[NewTicket2Controller alloc] initWithNibName:@"NewTicket2Controller" bundle:nil];

screen2.ticketString=self.ticket.text;//if you propertise the ticket textfield

NSLog(@"%@", screen2.ticketString);

希望它可以帮助你..

答案 2 :(得分:0)

您刚刚创建并参与了screen1。任何和所有值都将为零或初始化。

一些事情: 您希望尽可能将数据(模型)与视图和控制器分开。

您将不得不在两个视图控制器之间提供一些连接。 一种方法是将一个设置为另一个的薄弱环节。

NewTicket2Controller的示例 @property(非原子,弱)NewTicket1Controller *委托;

然后当您创建NewTicket2Controller时,您将分配self.delegate = screen1

之后,您可以使用委托访问方法。

(理想情况下,您要为代表设置协议)

答案 3 :(得分:0)

其他人给了你部分答案。让我立刻陈述一切。

首先,永远不要试图直接操纵另一个视图控制器的视图对象。这严重违反了"封装"面向对象程序设计原理。您应该将视图控制器的视图视为私有,并添加属性或方法以在视图控制器之间进行通信。

其次,您正在创建视图控制器的全新实例,并期望能够使用该新视图控制器实例来更改现有视图控制器中的设置。这就像购买一辆与现有汽车完美匹配的新车,在新车上设置广播电台,然后想知道为什么旧车上的广播电台没有变化。他们是不同的车!它们是不同的对象!它们可能是功能相同的功能,但它们是同一对象的不同实例。如果你有一个相同的双胞胎,它仍然是一个不同的人,对吧?

您需要一种方法来获取指向现有NewTicket1Controller对象的指针。你如何做到这一点取决于你的程序设置方式。发布有关如何设置视图控制器的一些信息。你在使用导航控制器吗? NewTicket1Controller是您的根视图控制器吗?你如何从视图控制器1到视图控制器2?一个segue? (假设您正在使用故事板。如果您不是,请告诉我们。)

相关问题