iOS子视图捕获到的touches如何让父视图响应
来源:互联网 发布:注册成为淘宝卖家 编辑:程序博客网 时间:2024/05/10 00:35
用代理实现最简单了,子视图声明一个protocol和与之对应的method和delegate property,然后父视图实现。
例如:
子视图SonView.h:
@class SonView; //这个必不可少,因为真正的class interface在下面声明,而在protocol声明中又要用到这个class,所以提前告诉XCode有这么一个class存在
@protocol SonViewTouchHandler <NSObject> //子视图声明protocol,只声明接口,不实现
- (void)SonViewTouchDownPoint: (CGPoint)touchPoint from:(id)sender;
- (void)SonViewTouchUpPoint: (CGPoint)touchPoint from:(id)sender;
@end
@interface SonView : UIView
@property (nonatomic, weak) id <SonViewTouchHandler> sonViewTouchHandlerDelegate; //delegate property代理 property,子视图用这个来访问父视图,这个变量的指向一般由父、子两个视图的创建者来设置
@end
父视图DadView.m:
@interface DadView () <SonViewTouchHandler> //此处父视图声明自己实现子视图的protocol
@end
@implementation DadView
//这两个在子视图protocol中声明方法在父视图中才真正实现,这就实现了子视图在不需要了解父视图的具体实现方法的情况下向父视图传送信息,此处传送的是子视图上用户触摸的位置信息
- (void)sonViewTouchDownPoint: (CGPoint)touchPoint from:(id)sender
{
...
}
- (void)sonViewTouchUpPoint: (CGPoint)touchPoint from:(id)sender
{
...
}
@end
子视图SonView.m
@implementation
//在子视图被用户触摸时呼叫父视图代理处理触摸事件,把用户触摸的位置信息通过代理发送给父视图
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch * touch = [touches anyObject];
CGPoint touchPoint = [touch locationInView:self];
[self.sonViewTouchHandlerDelegate sonViewTouchDownPoint: touchPoint from:self];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
//类似上面只是使用另一个对应的method
}
@end
以上就是一个典型的利用代理从子视图向父视图传值的具体实现方法。只要在合适的时候(一般是创建之后)把子视图sonView.sonViewTouchHandlerDelegate设置为父视图就可以了,如果子视图是由父视图创建的,则直接就是sonView.sonViewTouchHandlerDelegate = self就可以了
例如:
子视图SonView.h:
@class SonView; //这个必不可少,因为真正的class interface在下面声明,而在protocol声明中又要用到这个class,所以提前告诉XCode有这么一个class存在
@protocol SonViewTouchHandler <NSObject> //子视图声明protocol,只声明接口,不实现
- (void)SonViewTouchDownPoint: (CGPoint)touchPoint from:(id)sender;
- (void)SonViewTouchUpPoint: (CGPoint)touchPoint from:(id)sender;
@end
@interface SonView : UIView
@property (nonatomic, weak) id <SonViewTouchHandler> sonViewTouchHandlerDelegate; //delegate property代理 property,子视图用这个来访问父视图,这个变量的指向一般由父、子两个视图的创建者来设置
@end
父视图DadView.m:
@interface DadView () <SonViewTouchHandler> //此处父视图声明自己实现子视图的protocol
@end
@implementation DadView
//这两个在子视图protocol中声明方法在父视图中才真正实现,这就实现了子视图在不需要了解父视图的具体实现方法的情况下向父视图传送信息,此处传送的是子视图上用户触摸的位置信息
- (void)sonViewTouchDownPoint: (CGPoint)touchPoint from:(id)sender
{
...
}
- (void)sonViewTouchUpPoint: (CGPoint)touchPoint from:(id)sender
{
...
}
@end
子视图SonView.m
@implementation
//在子视图被用户触摸时呼叫父视图代理处理触摸事件,把用户触摸的位置信息通过代理发送给父视图
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch * touch = [touches anyObject];
CGPoint touchPoint = [touch locationInView:self];
[self.sonViewTouchHandlerDelegate sonViewTouchDownPoint: touchPoint from:self];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
//类似上面只是使用另一个对应的method
}
@end
以上就是一个典型的利用代理从子视图向父视图传值的具体实现方法。只要在合适的时候(一般是创建之后)把子视图sonView.sonViewTouchHandlerDelegate设置为父视图就可以了,如果子视图是由父视图创建的,则直接就是sonView.sonViewTouchHandlerDelegate = self就可以了
1 0
- iOS子视图捕获到的touches如何让父视图响应
- 让超出父视图的子视图响应事件
- ios 怎么让子视图不响应父视图的手势识别器呢?
- 让超出父视图范围的子视图响应事件,在UIView范围外响应点击
- 让超出自己视图范围的子视图响应事件
- 怎么让子视图不响应父试图的手势
- 怎么让子视图不响应父视图的手势识别器呢?
- iOS 点击子视图不让其响应父视图手势
- iOS-如何判断touch到子视图或离开视图
- iOS 子视图加入到父视图及移除父视图的过程
- ios 手势点击子视图的时候不响应父视图的点击事件
- ios 怎么禁止点击子视图的时候不响应父视图的点击事件
- iOS开发~子视图超过父视图范围的事件响应问题
- iOS -- 子视图超出父视图范围点击无法响应的问题
- 禁止子视图响应父视图的点击事件
- 怎么让子视图不触发添加到父视图上的tap手势?
- 如何让超出父视图区域的子视图实现点击事件
- iOS 如何设置子视图alpha不同于父视图
- cookie和session的区别
- Android开发之高级通知应用
- fatal error LNK1118: “READ”语句中的语法错误
- Android 之内容提供程序基础
- while(scanf("%d",&n)!=EOF)
- iOS子视图捕获到的touches如何让父视图响应
- 贝叶斯算法实例
- eclipse web module版本问题:Cannot change version of project facet Dynamic Web Module to 2.5.
- java多线程总结
- 安卓线程问题
- C++ 面试题
- DICOM基础知识--有用资料
- Android 单元测试之文件配置
- Spring4 mvc 基础教程~非常适合新手