代理:说的通俗一点就是自己做不了的事情,交给代理来做。
在这里通过一个例子来说明代理的使用。
1.实现一个例子,说明将要实现的功能:在一个视图控制器上定义一个lable1,一个button1(为了和下一个视图控制器上的控件进行区分,这里我们加个后缀1);通过点击button1,切换到视图控制器2。控制器2上,有一个button2和一个textField。用代理实现的功能是:当点击控制器2上的button2时,回到控制器1上,并将lable上的text内容改为我们在控制器2上textField上输入的内容。
2.首先我们创建一个视图控制器1(背景为红色的视图),并在上面添加上了一个button和一个lable。通过模态视图切换到另一个视图控制器2(背景为紫色的视图)上面。注:模态视图:就是在一个视图的基础上弹出另外一个视图,这个一个新的视图结构。并且当这个模态视图没有销毁并一直存在的时候,我们不能够进行对原来视图进行操作。当视图1切换到视图2时:我们的实现,
<span style="font-size:18px;">- (void)onButtonClicked:(UIButton *)sender
{
SFSecendViewController *secondVC = [[SFSecendViewController alloc] init];
</span><span style="font-size:18px;"> [self presentViewController:secondVC animated:YES completion:NULL];
}
</span>这段代码的含义就是当点击视图1中的button时的回调事件。在这里我们首先建立一个视图2的对象,并利用模态视图将视图2弹出:<span style="font-size:18px;"> [self presentViewController:secondVC animated:YES completion:NULL];
</span>
[selfdismissViewControllerAnimated:YEScompletion:NULL];
<span style="font-size:18px;">@protocol SFChangeLableDelegate <NSObject>
</span><span style="font-size:18px;">- (void)changeLable:(NSString *)text;
</span><span style="font-size:18px;">@end</span>
<span style="font-size:18px;">@interface SFSecendViewController : UIViewController <UITextFieldDelegate>
@property (nonatomic,weak) id <SFChangeLableDelegate> delegate;
@end
</span><span style="font-size:18px;">- (IBAction)onButtonClicked:(UIButton *)sender
{
[self dismissViewControllerAnimated:YES completion:NULL];
//在这里将textField的text值赋值给text。
NSString *text = self.textField.text;
//用本视图控制器的代理 调用代理中的回调。并将textField的text值传递给该回调。
[self.delegate changeLable:text];
}</span>
<span style="font-size:18px;">@interface SFViewController : UIViewController <SFChangeLableDelegate>
@end
</span> <span style="font-size:18px;">- (void)changeLable:(UITextField *)textfield
{
self.lable.text = textfield.text;
}
</span>
本文通过一个实例介绍iOS中的代理模式。在示例中,创建了两个视图控制器,通过模态视图切换。当在紫色背景的视图控制器2上点击button2时,代理模式使得内容能传递回红色背景的视图控制器1,更新lable1的text为textField的输入值。代理模式在iOS开发中用于不同组件间的通信,特别是数据的传递和事件响应。
1708

被折叠的 条评论
为什么被折叠?



