3

我使用 UITableView 作为用户/密码登录控件。现在它是视图上的唯一控件,还有一个登录按钮。当我点击里面时,文本编辑内容变为活动状态,键盘弹出,我可以输入。但是没有办法停止编辑。我想在我的 UIView 的白色区域上单击外部,以便将焦点从我的 UITableVIew 内的文本编辑器中移开,并且键盘再次变得不可见。

我怎么做?

4

3 回答 3

5

您可以添加 alpha 通道为零的按钮。在您的登录名和密码字段后面。通过以下方式设置此按钮的操作:

-(void)hideKeyboard:(id)sender
{
   [self.username resignFirstResponder];
   [self.password resignFirstResponder];
}
于 2012-05-08T14:57:09.860 回答
3

viewDidLoad让您的视图控制器监听键盘通知并创建一个点击识别器,它将接收您的 tableView 之外的所有事件:

- (void)viewDidLoad
{
   [super viewDidLoad];
   ...

    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];

    [nc addObserver:self selector:@selector(keyboardWillShow:) name:
     UIKeyboardWillShowNotification object:nil];

    [nc addObserver:self selector:@selector(keyboardWillHide:) name:
     UIKeyboardWillHideNotification object:nil];

    tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard:)];

    ... 
}

然后在键盘的通知方法中从您的视图中添加和删除手势识别器。

//add gesture recognizer when keyboard appears
-(void)keyboardWillShow:(NSNotification *) note {
    [self.view addGestureRecognizer:tapRecognizer];
}

//remove it when keyboard disappears
-(void)keyboardWillHide:(NSNotification *) note
{
    [self.view removeGestureRecognizer:tapRecognizer];
}

在手势识别器的操作方法中,您让所有第一响应者退出键盘:

-(IBAction)dismissKeyboard:(id)sender
{
    //this removes ALL firstResponder from view
    [self.view endEditing:TRUE];
}

不要忘记在某个时候结束收听键盘通知:

[[NSNotificationCenter defaultCenter] removeObserver:self];
于 2012-05-08T15:07:21.087 回答
1

在被调用函数中添加 Single Tap GestureRecognizer 并退出键盘

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(resignKeyBoard)];
[tap setNumberOfTapsRequired:1];
[self.view addGestureRecognizer:tap];
于 2012-05-08T14:47:15.263 回答