如何手动发送UIKeyboard通知

时间:2013-05-10 11:24:25

标签: iphone ios objective-c xcode ipad

我的uixt字段很少,键盘会重叠屏幕底部的一些uitext字段,为了解决这个问题,我已经实现了UIKeyboard通知,如

- (void)keyboardWasShown:(NSNotification*)aNotification
- (void)keyboardWillBeHidden:(NSNotification*)aNotification

我的uitextfields键盘returnKeyType是 UIReturnKeyNext 所以当用户点击下一步按钮时,我将我的下一个文本字段设为 becomeFirstResponder 但是当正在隐藏的文本字段时键盘成为第一响应者,其帧不会更改并更新到uikeyboard外的可见区域边界,因为当我点击文本字段时通知仅首次触发。 我需要在每个becomeFirstResponder事件上触发这个keyboardWasShown方法。 提前感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

首先确保这两种方法中的代码是正确的,并考虑到当您将第一个响应者从UITextField更改为另一个时,会有两个通知sendet,一个用于键盘隐藏,一个用于键盘显示。

我不知道您如何处理此通知以及您是否有权访问文本字段,但我设法仅使用scrolling的委托方法为某些文本文件实现UITextFields行为

-(BOOL)textFieldShouldReturn:(UITextField *)textField(因为键盘被隐藏而向下移动内容)

-(void)textFieldDidBeginEditing:(UITextField *)textField(因为键盘会出现而移动内容)

使用此方法即使您的文本字段已设置为inputView其他视图(如UIPickerView),也可以处理内容移动。

答案 1 :(得分:0)

我建议使用插入式替换库TPKeyboardAvoiding,它将处理视图的所有移动。如果,由于屏幕键盘,文本字段将被隐藏。它非常易于使用,效果很好。

答案 2 :(得分:0)

这就是我实现代码的方式:

1)我的观点是UIScrollView。

2)我在视图中有多个UITextField,并使用标记ID来区分它们。当用户点击UITextField时,会调用此委托来移动UIScrollView:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {

switch (textField.tag)
{
    case 0:
        [myScrollView setContentOffset:CGPointMake(0, 18) animated:YES];
        break;
    case 1:
        [myScrollView setContentOffset:CGPointMake(0, 56) animated:YES];
        break;
    case 2:
        [myScrollView setContentOffset:CGPointMake(0, 94) animated:YES];
        break;
    case 3:
        [myScrollView setContentOffset:CGPointMake(0, 132) animated:YES];
        break;
    case 4:
        [myScrollView setContentOffset:CGPointMake(0, 170) animated:YES];
        break;
    case 5:
        [myScrollView setContentOffset:CGPointMake(0, 208) animated:YES];
        break;
    case 6:
        [myScrollView setContentOffset:CGPointMake(0, 246) animated:YES];
        break;
    case 7:
        [myScrollView setContentOffset:CGPointMake(0, 284) animated:YES];
        break;
    case 8:
        [myScrollView setContentOffset:CGPointMake(0, 322) animated:YES];
        break;
    default:
        break;
}
return YES;
}

3)我也有UITextView并使用此委托来达到同样的效果:

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView {

if(textView.tag == 0)
{
    [myScrollView setContentOffset:CGPointMake(0, 360) animated:YES];
    // do some stuff...
}
if(textView.tag == 1)
{
    [myScrollView setContentOffset:CGPointMake(0, 504) animated:YES];
    // do some stuff...
}
return YES;
}

注意:CGPointMake(0, 123)值取决于您自己的文本字段坐标。