如何从视图中返回一个或多个值?

时间:2010-10-06 17:14:45

标签: iphone ios cocoa-touch

我有一个iPhone应用,主视图有UILabelUIButton。单击该按钮时,我显示第二个视图。第二个视图有一个文本框和一个OK按钮。

我希望用户在第二个视图的文本框中输入内容,然后单击“确定”按钮;这应关闭第二个视图,并将输入的文本应用到第一个视图上的UILabel

如何在第二个视图中公开文本框的内容,如何从第一个视图中访问它?另外,如何在第二个视图上获取OK按钮以关闭视图(即导航回第一个视图)?

更新:由于我来自.NET世界,我可以描述如何在.NET中执行相同的任务,这可能会让我更清楚我正在尝试做什么。在.NET应用程序中,我将创建一个表单(带有文本框和按钮),然后使用ShowDialog显示它,它以模态方式显示表单。我会在表单中添加一个公共属性(称为EnteredText或其他东西),它返回文本框中的内容。当我的调用代码从ShowDialog调用继续时,我只是读取了表单的EnteredText属性并使用它,然后处理该表单。

我试图用iPhone应用程序做同样的事情。

4 个答案:

答案 0 :(得分:6)

创建委托协议并将第一个视图指定为第二个视图的委托。然后将一个方法添加到符合协议的主视图中。

委托类(myDelegate.h)看起来像这样:

#import <Foundation/Foundation.h>
@protocol myDelegate
- (void) textContent:(NSString *)text;
@end

然后将其添加到第二个视图头文件中:

#import "myDelegate.h"
@interface secondView : UIView {

id <myDelegate> delegate;
}
@property (nonatomic,retain) id <myDelegate> delegate;

第二次观看实施:

@synthesize delegate;

然后你的主视图(标题):

#import "myDelegate.h"

@interface mainView: UIView <myDelegate> {

}

然后在您的主视图实现中,您需要实现方法

- (void) textContent:(NSString *)text {
//Do something
}

另外,当您从主视图中打开第二个视图时,您需要设置代理:

[secondView setDelegate:self];

最后,当您点击按钮时,请调用委托方法(即与主视图对话):

[delegate textContent:string];

答案 1 :(得分:0)

我是Android的新手,但是从我所经历过的所有教程中,您似乎需要使用Intent将第二个视图中的信息传递回第一个视图。正如我所说,我是Android的新手,所以可能会有不同的/更好的方法来实现它。

答案 2 :(得分:0)

由于我发现你对iOS上的一般编码风格不是很熟悉,我建议你开始阅读Apple文档,其中包含了许多在启动iOS项目时必须知道的基本内容。

iOS Application Programming Guide是一个很好的起点。首先阅读文档时,请务必了解更多信息。

答案 3 :(得分:0)

这听起来应该在控制器中,它应该是文本字段的委托(以便接收对文本的更改)和按钮的目标(以便接收动作消息告诉它做任何与文本有关的事情)。这似乎与显示值或响应原始事件(视图的作业)无关。