在UITableView外部聚焦以移除键盘

时间:2012-05-08 14:41:50

标签: ios ios5

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

我该怎么做?

3 个答案:

答案 0 :(得分:5)

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

-(void)hideKeyboard:(id)sender
{
   [self.username resignFirstResponder];
   [self.password resignFirstResponder];
}

答案 1 :(得分: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];

答案 2 :(得分:1)

添加单击GestureRecognizer并在已调用的函数中重新调整键盘

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(resignKeyBoard)];
[tap setNumberOfTapsRequired:1];
[self.view addGestureRecognizer:tap];