我无法触摸的UIButton
我在pickerView上方创建了一个按钮来解除它。 ,我想我是这么做的, 这里是启动pickerView的代码以及它的解除按钮。我无法触摸的UIButton
UIPickerView *tempPickerView = [[[UIPickerView alloc] initWithFrame:
CGRectMake(kPickerViewX, kPickerViewY, kPickerViewWidth, kPickerViewHeight)] autorelease];
tempPickerView.showsSelectionIndicator = YES;
tempPickerView.delegate = self;
tempPickerView.dataSource = self;
UIButton *pickerButton = [[UIButton alloc] initWithFrame:CGRectMake(0, -32, 52, 32)];
[pickerButton setBackgroundImage:[UIImage imageNamed:@"week.png"]
forState:UIControlStateNormal];
[pickerButton addTarget:self action:@selector(hidePicker)
forControlEvents:UIControlEventTouchUpInside];
[tempPickerView addSubview:pickerButton];
[tempPickerView bringSubviewToFront:pickerButton];
[pickerButton release];
[self.view addSubview:tempPickerView];
return tempPickerView;
,它看起来像这样:
该按钮位于pickerView左上角cornor,忘了“周”,它只是一个临时名称。
问题是,我无法触摸这个按钮,每当我尝试触摸它,我只是直接触摸它后面的东西,如talbeViewCell。
是因为我在pickerView的框架之外添加了按钮?
我指的是按钮的原点的坐标为(0,-32),
,以便它的pickerView上面显示,有任何问题与协调?
任何人都可以告诉如何解决这个问题?
非常感谢和很多!
问题是,您已将按钮放在其父视图边界之外。 iOS现在这样做(简化,不是100%正确,但你得到的交易):
- 它注意到触摸发生。它计算该触摸的坐标。
- 然后尝试找出哪个视图被触摸。为此,它会调用您的应用的
UIWindow
对象上的hitTest:withEvent:
方法。 - 反过来,每个孩子都会拨打
hitTest:withEvent:
,如果需要的话,每个孩子都会拨打hitTest:withEvent:
。 - 当调用视图的
hitTest:withEvent:
时,它首先查看坐标是否在其自己的范围内(IIRC)。如果不是,则返回nil
。否则它会给子女打电话hitTest:withEvent:
。
的hitTest:withEvent:
documentation明确地说:
点摆在接收器的边界之外从不报告为命中,即使他们实际上在于接收器的子视图中的一个内。
现在的问题是您的按钮不在其父视图之外。因此,hitTest:withEvent:
确定触摸坐标不在选择器视图的边界内,并且从不会询问其子(按钮)是否可能被击中。
您可以对选取器进行子类化并覆盖hitTest:withEvent:
方法来“修复”这个问题,但真正的解决方法是移动按钮,使其成为选取器的同胞而不是孩子。
非常感谢!我知道我该怎么做!我将使用pickerView以及其中的此按钮来制作视图,然后应该可以! – 2012-01-19 05:01:35
我认为这可能是由UIPickerView
的命中测试方法造成的。如果触摸超出范围,它可能会从pointInside:withEvent:
返回NO
。头文件(UIView.h)评论说
默认返回YES,如果点在边界
既然你放置的UIPickerView
边界之外的按钮,那很可能是这个原因。
作为一种解决方法,您可以将按钮插入选择器的超级视图。
尝试用标准圆角矩形按钮替换按钮并重试。 – Raptor 2012-01-17 08:21:37