我有UITableView
有一些单元格,我为每个单元格添加UITextField
。
我设置textField.clearButtonMode = UITextFieldViewModeWhileEditing
。
当我编辑textField时,清除按钮和键盘都会出现。我在textField中键入了一些单词,然后点击清除按钮,键盘将被隐藏,但textField中的文本将不会被清除。
除了清除按钮外,所有其他工作都很顺利。
答案 0 :(得分:7)
我遇到了这个问题,因为我忘记了我正在使用UITapGestureRecognizer
抓住桌面上的水龙头来解除键盘,它正在捕捉清除按钮上的水龙头,阻止它运行。在cancelsTouchesInView=NO
上添加UITapGestureRecognizer
以使触摸仍然生效,并使用点按器方法上的CGRectContainsPoint
进行检查,仅在点按未结束时检查resignFirstResponder
当前UITextField
的框架矩形。请注意,这仍然不完全是完美的,因为在自动更正上点击X可能在文本字段的frame rect之外,因此检查单元格的contentView
会更好。
答案 1 :(得分:1)
我无法重现您遇到的问题,因为触摸“清除”按钮不会也不应该让第一个响应者辞职。但也许您可以将您的代码与我下面包含的最基本用例进行比较,以找出问题所在。
此外,我建议您阅读有关UIResponder的文档,因为您似乎可能无意中涉足此区域。
@implementation TextFieldTableViewController
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return 5;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
// Remove old instances of myTextField
for (UIView *oldView in cell.contentView.subviews)
[oldView removeFromSuperview];
// Create my new text field
UITextField *myTextField = [[UITextField alloc] initWithFrame:cell.contentView.bounds];
[myTextField setClearButtonMode:UITextFieldViewModeWhileEditing];
[myTextField setBorderStyle:UITextBorderStyleRoundedRect];
// Add the TextField to the content view
[cell.contentView addSubview:myTextField];
return cell;
}
@end
答案 2 :(得分:1)
如果你有手势识别器,你应该这样做
UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(methodThatYouMayCall)];
[myTextField addGestureRecognizer:gestureRecognizer];
gestureRecognizer.delegate = self;
gestureRecognizer.cancelsTouchesInView = NO;
这将清除文本字段,并在您单击清除按钮时触发“methodThatYouMayCall”,以便您也应该这样做 你的textField.clearButtonMode是一种UIButton类,所以你可以这样做
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
if ([touch.view isKindOfClass:[UIButton class]])
{
return NO;
}
else
{
return YES;
}
}
不要忘记将该类标记为实现UIGestureRecognizerDelegate协议。 希望这会对你有所帮助。
答案 3 :(得分:0)
虽然最初的问题不是由此引起的,但我认为任何导致这里的未来搜索可能需要知道:
添加到 UITableViewCell
的视图必须作为子视图添加到其 contentView
属性,否则您可能会遇到未启用用户交互的情况下显示的视图。 >
您应该从 iOS 2.0 开始向 contentView
添加子视图。