1

我的 ui 中几乎没有 uitextfields,其中键盘将与屏幕底部的一些 uitextfields 重叠,为了处理这个问题,我实现了 UIKeyboard 通知,例如

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

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

4

3 回答 3

1

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

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

-(BOOL)textFieldShouldReturn:(UITextField *)textField(将内容向下移动,因为键盘是隐藏的)

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

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

于 2013-05-10T11:36:23.343 回答
0

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

于 2013-05-10T11:26:57.783 回答
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)值取决于您自己的文本字段坐标。

于 2013-05-10T12:45:02.677 回答