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
- UIView使用代理调用控制器的方法
- 通过UIView 获得它的控制器方法
- Yii控制器调用其他控制器的方法
- Yii控制器调用其他控制器的方法
- 视图调用控制器的方法
- 如何调用控制器的方法
- UIView 消失的时候调用的方法
- UIView的setNeedsDisplay和setNeedsLayout方法调用
- [导航控制器中,各个控制器的dealloc方法调用时机]
- tp中调用别的控制器的方法
- iOS中控制器的11中生命周期的调用方法以及使用
- UIView的viewWithTag方法的使用
- 如何在UIView中使用视图控制器
- 控制器间的传值(顺传&回传),代理方法
- iOS继承UITableViewController的视图控制器不执行代理方法
- 在Angular外部使用js调用Angular控制器中提供的函数方法或变量
- 在Angular外部使用js调用Angular控制器中提供的函数方法或变量
- 使用Xire代理方式调用webservice方法
- 积累
- 转帖一篇sixxpack破解的文章!
- ASP.NET开发学习视频教程大全(共800集)
- 用Python侦测比特币交易的网络可视化分析
- 心很痛
- UIView使用代理调用控制器的方法
- 今天以此立一个flag用来激励自己
- pat 1062. 最简分数(20) 水
- 最流行的开源飞控项目ArduPilot Mega(APM)介绍及发展历史
- Servlet Listener 简单示例
- 【问题】ValueError: numpy.dtype has the wrong size, try recompiling解决2
- Android代码书写规范
- 西电捷通TISec支撑北京核心区配电网安全运行四年
- pom.xml详解