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

Mus*_*sis 1 iphone cocoa-touch ios

我有一个iPhone应用程序,主视图有a UILabel和a UIButton.单击该按钮时,我显示第二个视图.第二个视图有一个文本框和一个OK按钮.

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

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

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

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

Ben*_*Ben 6

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

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

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

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

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

id <myDelegate> delegate;
}
@property (nonatomic,retain) id <myDelegate> delegate;
Run Code Online (Sandbox Code Playgroud)

并向您的第二个视图实施:

@synthesize delegate;
Run Code Online (Sandbox Code Playgroud)

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

#import "myDelegate.h"

@interface mainView: UIView <myDelegate> {

}
Run Code Online (Sandbox Code Playgroud)

然后在您的mainview实现中,您需要实现该方法

- (void) textContent:(NSString *)text {
//Do something
}
Run Code Online (Sandbox Code Playgroud)

此外,当您从主视图中打开第二个视图时,您需要设置委托:

[secondView setDelegate:self];
Run Code Online (Sandbox Code Playgroud)

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

[delegate textContent:string];
Run Code Online (Sandbox Code Playgroud)