在ios中如果按钮的位置超出父视图无法响应.如何处理?

在按钮所在的父视图中重写以下方法.

以下例子中我在父视图外添加了二个按钮callBtn和detailBtn;

以下例子应用场景为.高德地图中的自定义泡泡视图.因为泡泡视图默认添加在大头针视图上.而一般情况下大头针视图的尺寸远远小于泡泡视图导致泡泡视图整个都在大头针视图外.无法响应点击事件.

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {

UIView *view = [super hitTest:point withEvent:event];  // 先按正常方法获取响应事件的视图

if (view == nil) {

CGPoint tempointcallBtn = [self.calloutView.callBtn convertPoint:point fromView:self]; // 将点击的点坐标转换成我们想要响应的视图的对应坐标系中的坐标.(坐标系转换)

CGPoint tempointdetailBtn = [self.calloutView.detailBtn convertPoint:point fromView:self]; // 如果要判断多个按钮,则根据此规则多次添加对应点.关在if语句后添加对应else if判断.

if (CGRectContainsPoint(self.calloutView.callBtn.bounds, tempointcallBtn)) // 判断当前点击的位置是否在我们要响应的视图中.

{

view = self.calloutView.callBtn; // 如果判断为真则返回我们要响应的视图.

} else if (CGRectContainsPoint(self.calloutView.detailBtn.bounds, tempointdetailBtn)) {

view = self.calloutView.detailBtn;

}

}

return view;

}

时间: 2024-10-06 00:41:05

在ios中如果按钮的位置超出父视图无法响应.如何处理?的相关文章

让超出父视图范围的子视图响应事件,在UIView范围外响应点击

//重写该方法后可以让超出父视图范围的子视图响应事件 - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {     UIView *view = [super hitTest:point withEvent:event];     if (view == nil) {         for (UIView *subView in self.subviews) {             CGPoint tp = [sub

iOS中的按钮(UIButton)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; // Override point for customization after appl

iOS中调整view层级位置的两个属性

控件的层级关系和你加入到父视图的顺序有关,也就是先addsubview至父视图的,层级越低,会被后加入的遮盖. 可以通过以下函数改变子视图的层级 将一个UIView显示在最前面: - (void)bringSubviewToFront:(UIView *)view; 将视图显示在下面:- (void)sendSubviewToBack... 例如下面的代码示例: UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake(10, 50, 10

子控件超出父控件响应

// 事件传递给subview - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { CGPoint subviewP = [self convertPoint:point toView:_subview]; if ([_subview pointInside:subviewP withEvent:event]) { return _subview; }else { return [super hitTest:point

iOS中MVC等设计模式详解

iOS中MVC等设计模式详解 在iOS编程,利用设计模式可以大大提高你的开发效率,虽然在编写代码之初你需要花费较大时间把各种业务逻辑封装起来.(事实证明这是值得的!) 模型-视图-控制器(MVC)设计模式是被大家广为熟悉和使用的模式,实际上在移动开发中尤其ios开发中,这种模式被发挥到淋漓尽致 MVC设计模式包括三个部分:模型.视图和控制器. 模型包含数据.信息,逻辑,或对象被认为是部分的业务层的iOS应用. 视图包含所有的用户信息的组件,如文本区域,按钮,滑块,被认为是表示层的一个iOS应用.

IOS中UIScrollView的contentSize、contentOffset和contentInset属性

IOS中,UIScrollView是可以滚动的视图,其中最常用的UITableView就是继承了UIScrollView. 跟所有的view一样,UIScrollView有一个frame属 性,同时,UIScrollView还具有contentSize.contentOffset和contentInset属性.我在学习中,就觉得其中 contentSize和contentOffset相对比较好理解,对contentInset就有点不太好理解.下面具体解释一下. contentSize是UIScr

iOS 中一个tabBarController 切换到另一个tabBarController的实现方法

iOS 中主tab(含有5个视图) 切换到次级tab(含有另外五个视图) 的使用方法: -(void)makeTabBarHidden:(BOOL)hide { if ( [self.rootTabBarController.view.subviews count] < 2 ) { return; } UIView *contentView; if ( [[self.rootTabBarController.view.subviews objectAtIndex:0] isKindOfClass

IOS中的响应者链

响应者链就是当子视图不响应,父视图有响应事件,父视图响应 #import "RootViewController.h" #import "ResponderView.h" @interface RootViewController () @end @implementation RootViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after

文顶顶 iOS开发UI篇—在UIImageView中添加按钮以及Tag的参数说明

ios开发UI篇—在ImageView中添加按钮以及Tag的参数说明 一.tag参数 一个视图通常都只有一个父视图,多个子视图,在开发中可以通过使用子视图的tag来取出对应的子视图.方法为Viewwithtag: 提示点:在xib中如果想要通过tag参数获取对应的控件(属性),不要把tag的参数设置为0,因为xib中所有的对象默认tag都为0,设置为0取不到对象. 二.ImageView中添加按钮(1)ImageView和Button的比较 Button按钮的内部可以放置多张图片(4),而Ima