gpt4 book ai didi

iphone - 当设置为 UITextField 的 leftView 时,UIButton 在边界外接收触摸事件

转载 作者:塔克拉玛干 更新时间:2023-11-01 19:09:44 25 4
gpt4 key购买 nike

这让我有点头疼。在我正在构建的应用程序中,我使用了 UITextField,并添加了一个按钮作为 leftView 属性。然而,似乎在 iPad(包括 sim 和设备)上,按钮正在接收超出其范围的触摸。当用户触摸占位符文本时,这会干扰 UITextField 成为第一响应者的能力。似乎在触摸占位符文本时,事件是由按钮而不是文本字段本身处理的。奇怪的是,这似乎只发生在 iPad 上;它在 iPhone 上按预期工作。

下面是一些演示问题的简单代码:

- (void)viewWillLayoutSubviews {

[super viewWillLayoutSubviews];

UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(10.0f,
10.0f,
(self.view.frame.size.width - 20.0f),
35.0f)];
textField.borderStyle = UITextBorderStyleRoundedRect;
textField.placeholder = @"Test text";
[self.view addSubview:textField];

UIButton *addButton = [UIButton buttonWithType:UIButtonTypeContactAdd];
[addButton addTarget:self action:@selector(touchDown:) forControlEvents:UIControlEventTouchDown];
[addButton addTarget:self action:@selector(touchUpInside) forControlEvents:UIControlEventTouchUpInside];
[addButton addTarget:self action:@selector(touchUpOutside) forControlEvents:UIControlEventTouchUpOutside];
textField.leftView = addButton;
textField.leftViewMode = UITextFieldViewModeAlways;
}

- (void)touchDown:(id)sender {
NSLog(@"touchDown");
}

- (void)touchUpInside {
NSLog(@"touchUpInside");
}

- (void)touchUpOutside {
NSLog(@"touchUpOutside");
}

似乎有时触摸仍然被认为是在内部,即使它们看起来在按钮的边界之外。然后更进一步,按钮只接收 UIControlEventTouchDown 然后 UIControlEventTouchUpOutside。

2013-07-25 11:51:44.217 TestApp[22722:c07] touchDown
2013-07-25 11:51:44.306 TestApp[22722:c07] touchUpInside
2013-07-25 11:51:44.689 TestApp[22722:c07] touchDown
2013-07-25 11:51:44.801 TestApp[22722:c07] touchUpOutside

编辑下面是一个示例,其中按钮的背景颜色已更改以及触发上述事件的大致区域。另外,我检查了按钮的框架,它的宽度小于 30px。

Example image

最佳答案

昨晚我坐下来花了更多时间讨论这个问题。我已经在我的真实应用程序中子类化了 UITextField,所以我最终覆盖了 -(id)hitTest:withEvent: ,如下所示。到目前为止,这一直运行良好。

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

if ([[super hitTest:point withEvent:event] isEqual:self.leftView]) {
if (CGRectContainsPoint(self.leftView.frame, point)) {
return self.leftView;
} else {
return self;
}
}

return [super hitTest:point withEvent:event];
}

关于iphone - 当设置为 UITextField 的 leftView 时,UIButton 在边界外接收触摸事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17864334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com