UIView使用代理调用控制器的方法

来源:互联网 发布:如何恢复手机软件数据 编辑:程序博客网 时间:2024/06/01 18:45

IOS开发中,我们经常需要将视图(UIView)的创建部分从控制器(UIViewController)里分离出来,以免控制器过于臃肿。
然而,这将导致一个情况,就是单独的视图(UIView),有的时候,不能完成一些必须在控制器(UIViewController)里才能完成的操作。
比如说:
我的视图创建了一个按钮(UIButton),这个按钮点击以后需要从当前控制器跳转到下一个控制器。这个跳转的方法,如果写在这个单独的视图里面是无效的,因为它(self)只是一个UIView而不是UIViewController,没有presentViewController等方法。
这时候,我们需要在UIView中调用一下UIViewController的方法。这就用到了代理。

例子:
这个例子中,我们创建了两个文件。
一个控制器

mainViewController.hmainViewController.m

一个视图

childView.hchildView.m

接下来,我们来看一下怎么在childView这个视图里面使用代理,并调用mainViewController里的方法

1.在childView.h中#import…下添加

@protocol UIViewDelegate <NSObject> // 拓展一个代理- (void) delegateMethod; // 这个是需要被调用的代理方法@end

2.在childView.h添加一个代理属性

@property (nonatomic, weak) id<UIViewDelegate> delegate;

3.这样在childView.m中就可以调用这个定义好的代理方法了

[self.delegate delegateMethod];

当然,这是没有响应的,因为代理方法还没有任何具体的实现。具体实现,我们在mainViewController里面实现。
4.mainViewController遵循这个代理协议

@interface mainViewController: UIViewController<UIViewDelegate>

别忘了需要 #import “childView.h”

5.在实例化childView的地方设置代理对象为当前控制器

UIView *uiview = [[UIView alloc] initWithFrame: CGRectMake(10,10,100,100)]; // 这里初始化需要frame否则UIView当中Button无法响应点击事件;uiview.delegate = self;

6.最后,重写代理方法的具体实现

- (void) delegateMethod {// doSomething}
0 0
原创粉丝点击