这对我来说有点头疼。在我正在构建的应用程序中,我正在使用 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
编辑 这是一个更改按钮背景颜色以及触发上述事件的近似区域的示例。另外,我检查了按钮的框架,它的宽度小于 30 像素。