我有以下代码:
- (void)viewDidLoad
{
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(dismissKeyboard)];
[self.view addGestureRecognizer:tap];
tap.cancelsTouchesInView = NO;
tap.delegate = self;
[tap release];
}
-(void)dismissKeyboard {
[self.textField resignFirstResponder];
}
textField有一个clearButton并启用了自动更正。当我点击clearButton时,一切正常,键盘在UITextField
被清除后仍然显示。但是,当我不想接受建议的自动更正时,键盘会消失,我的文字会被建议的文本替换。
我需要UITapGestureRecognizer
,因为UITextField
内有UITableView
,所以当用户点击UITextField
时,我想重新签名键盘。
如何解决此问题,以便在用户需要时可以拒绝自动更正,键盘仍处于活动状态?为什么这对clearButton正常工作,但在拒绝自动校正时却不能正常工作?
编辑:它与clearButton一起使用,因为它在UITextField
内。因此,手势没有被解雇。但是当点击建议的文本更正时,会被触发...有没有办法检查用户是否点击了建议的文本更正?
答案 0 :(得分:1)
这是我在实现蓝色自动更正文本时解决问题的手势委托方法:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
BOOL handleTouch = NO;
UIView *v = [self.view hitTest:p withEvent:nil];
Class autocorrectionCancelClass = NSClassFromString(@"UIAutocorrectInlinePrompt");
if( ![v isKindOfClass:UIControl.class] && ![v isKindOfClass:autocorrectionCancelClass] && ![v isDescendantOfView:currentlyEditedTextView] )
{
handleTouch = YES;
}
return handleTouch;
}
点击自动更正取消按钮,v是私有SDK类UIAutocorrectInlinePrompt
的视图,但它也是已编辑的UITextField
/ UITtextView
的子视图。
编辑:检查类是否更好,因为对于UITextField
,UIAutocorrectInlinePrompt
视图不是该字段的后代(在iOS 4.3和5.0上测试)。问题是这个类可以重命名,因为它是私有的。
答案 1 :(得分:0)
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
return ![touch.view isKindOfClass:NSClassFromString(@"UIAutocorrectInlinePrompt")];
}