Wan*_*ang 1 iphone events picker touch uibutton
我在pickerView上面做了一个按钮来解雇它.我想我已经做到了,这里是启动pickerView的代码以及它的dismiss按钮.
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;
Run Code Online (Sandbox Code Playgroud)
它看起来像这样:

那个按钮位于pickerView的左上角,忘记了"周",它只是一个临时名称.
问题是,我无法触摸此按钮,每次我试图触摸它,我只是直接触摸它背后的东西,如talbeViewCell.
是因为我在pickerView的框架外添加了按钮?
我的意思是按钮原点的坐标是(0,-32),
所以它会显示在pickerView上方,坐标有问题吗?
任何人都可以告诉如何解决这个问题?
非常感谢和很多!!!
问题是您已将按钮放在其父视图的边界之外.iOS现在这样做(简化,不是100%正确,但你得到了交易):
hitTest:withEvent:在UIWindow您应用的对象上调用该方法.hitTest:withEvent:每个孩子,hitTest:withEvent:如果有必要,每个孩子都会打电话给他们的孩子.hitTest:withEvent:调用视图时,它首先查看坐标是否在其自己的范围内(IIRC).如果不是,则返回nil.否则就会召唤hitTest:withEvent:孩子.该hitTest:withEvent:文件 明确指出:
位于接收者界限之外的点永远不会被报告为命中,即使它们实际上位于接收者的子视图中.
现在的问题是您的按钮位于其父视图之外.因此,hitTest:withEvent:确定触摸坐标不在拾取器视图的范围内,并且永远不会问它的子(按钮)是否可能被击中.
你可以子类化选择器并重写hitTest:withEvent:方法来"修复"这个,但真正的解决方法是移动按钮使其成为选择器的兄弟,而不是孩子.
| 归档时间: |
|
| 查看次数: |
505 次 |
| 最近记录: |