`
java-mans
  • 浏览: 11631006 次
文章分类
社区版块
存档分类
最新评论

当键盘出现的时候,如何让UITextField自动上移

 
阅读更多

对于iPhone界面控件的操作应该算是开发中必备的能力。键盘出现的时候上移相关的控件算是常见的需求,但是从这么多人问这个问题就可以看出,还是有很多人对这些需求的实现方式有疑问。

对于这个问题,主要是通过增加对键盘出现和消失的相应的Notification,然后在键盘出现和消息的时候,通过设置相关控件的frame来实现。相关代码如下,来源自stackoverflow。

-(void)textFieldDidBeginEditing:(UITextField *)sender
{
    if ([sender isEqual:_textField])
    {
        //move the main view, so that the keyboard does not hide it.
        if  (self.view.frame.origin.y >= 0)
        {
            [self setViewMovedUp:YES];
        }
    }
}

//method to move the view up/down whenever the keyboard is shown/dismissed
-(void)setViewMovedUp:(BOOL)movedUp
{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.5]; // if you want to slide up the view

    CGRect rect = self.view.frame;
    if (movedUp)
    {
        // 1. move the view's origin up so that the text field that will be hidden come above the keyboard 
        // 2. increase the size of the view so that the area behind the keyboard is covered up.
        rect.origin.y -= kOFFSET_FOR_KEYBOARD;
        rect.size.height += kOFFSET_FOR_KEYBOARD;
    }
    else
    {
        // revert back to the normal state.
        rect.origin.y += kOFFSET_FOR_KEYBOARD;
        rect.size.height -= kOFFSET_FOR_KEYBOARD;
    }
    self.view.frame = rect;

    [UIView commitAnimations];
}


- (void)keyboardWillShow:(NSNotification *)notif
{
    //keyboard will be shown now. depending for which textfield is active, move up or move down the view appropriately

    if ([_textField isFirstResponder] && self.view.frame.origin.y >= 0)
    {
        [self setViewMovedUp:YES];
    }
    else if (![_textField isFirstResponder] && self.view.frame.origin.y < 0)
    {
        [self setViewMovedUp:NO];
    }
}


- (void)viewWillAppear:(BOOL)animated
{
    // register for keyboard notifications
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:)
                                                 name:UIKeyboardWillShowNotification object:self.view.window];
}

- (void)viewWillDisappear:(BOOL)animated
{
     // unregister for keyboard notifications while not visible.
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
}


分享到:
评论

相关推荐

    UItextField和UItextView自动移动

    为了解决这个问题,开发者通常需要实现一个功能,使得这些控件能够随着键盘的升起而自动上移,确保输入框始终可见。这个过程涉及到对UIResponder、NSNotificationCenter和Auto Layout的深入理解。 首先,我们需要...

    ios-更新:CHTTextFieldHealper输入框上移、回收键盘.zip

    通过添加UITextField类目,使用runtime实现,TextField被遮挡时视图上移效果,点击空白回收键盘,不需要写一句代码,所有TextField全拥有此功能,可以控制是否开启,上移视图,以及距keyboard距离 更新:1.解决...

    swift-视图随键盘自动调整的简单框架小巧易用

    它允许开发者轻松地使文本输入视图在键盘弹出时自动上移,键盘消失时恢复原位,无需编写大量复杂的布局代码。 首先,框架的核心功能在于监听键盘的显示和隐藏事件。它使用UIKeyboardNotifications来捕获这些事件,...

    ios应用源码之点击输入框弹出键盘时,输入框的整个视图向上移动以便用户可以看到输入的内

    当用户点击输入框(UITextField或UITextView)弹出键盘时,有时由于键盘遮挡,输入框会被隐藏在键盘下方,导致用户无法看到正在输入的内容。为了解决这个问题,iOS提供了多种方法来处理键盘弹出时视图的自动调整,以...

    iOS 软键盘遮挡问题 点击外部隐藏软键盘

    通过调整这些滚动视图的contentInset和scrollIndicatorInsets,可以在键盘出现时自动上移内容,确保用户仍然可以看见并操作被键盘遮挡的部分。 总结起来,处理iOS软键盘遮挡问题的关键在于提供直观的用户交互方式来...

    IOS开发中键盘输入屏幕上移的解决方法

    为了解决这个问题,开发者需要采取措施让屏幕随键盘的出现而上移,确保用户能方便地与界面元素交互。以下是一种实现这一功能的方法: 首先,为了监听UITextField的输入状态,我们需要遵循UITextFieldDelegate协议。...

    iOS键盘遮挡输入框

    UIStackView会自动处理输入框之间的布局,当键盘出现时,可以整体上移,保持至少一个输入框可见。 总之,处理iOS键盘遮挡输入框的问题,开发者可以通过监听键盘通知、使用第三方库、调整父视图内容偏移量或利用...

    ios源码之一个完美的键盘控制器Demo.rar

    在键盘显示和隐藏的通知回调中,更新约束可以使内容随键盘的出现和消失自动上移或下移。 4. **UIScrollView和contentInset**:如果界面包含一个UIScrollView,可以利用`contentInset`属性来适应键盘。当键盘显示时...

    IOS 解决输入框被键盘遮挡问题

    然而,有时`inputAccessoryView`和`inputView`并不能满足所有需求,特别是当界面需要整体上移时。这时,我们可以使用`UIKeyboardNotifications`来监听键盘的显示和隐藏,然后相应地调整界面布局。 3. 键盘通知:...

    滚动视图自适应键盘出现和消失

    接下来,为了使滚动视图自动滚动,我们需要计算出输入框相对于屏幕底部的距离,如果这个距离小于键盘高度,则滚动视图需要上移。这里我们可以使用`UIApplication.shared.keyWindow?.frame.size.height`来获取屏幕...

    UITableview处理键盘遮挡

    然而,在实际应用中,我们经常会遇到一个问题:当用户在`UITableView`中的输入框(如UITextField)中输入时,弹出的键盘可能会遮挡住部分或全部表格内容,这无疑会给用户体验带来困扰。针对“`UITableView`处理键盘...

    键盘遮挡输入框 界面多个输入框

    在移动应用开发中,尤其是Android或iOS平台,经常会遇到一个问题:当用户在界面中的一个输入框(EditText在Android,UITextField或UITextView在iOS)中输入时,弹出的虚拟软键盘可能会遮挡到下方的其他输入框或者...

    键盘遮挡文本框的问题

    1. 使用Auto Layout:利用Auto Layout的约束可以调整文本框的位置,使其在键盘弹出时自动上移。通过设置适当的约束,可以使文本框在键盘出现时与键盘底部保持一定的距离。 2. 使用UIKeyboardNotifications:注册...

    swift-YJKeyBoard一行代码解决iOS键盘遮挡问题

    它还提供了一个可自定义的偏移值`keyboardSpace`,用于控制键盘出现时视图上移的距离。 此外,YJKeyBoard还支持自定义手势操作,例如向上滑动隐藏键盘,这可以增强用户体验。你只需在你的ViewController中实现以下...

    ios-带有placeholder的TextView和跟随键盘移动的textfield.zip

    在项目中,`UITextView`被配置为跟随键盘移动,这是一种良好的用户体验设计,因为当用户在键盘遮挡到`UITextView`时,视图会自动上移,确保输入框始终可见。这种效果通常是通过监听键盘通知(如...

    IOS应用源码——出现键盘,输入区域向上移动以便显示出输入的区域.rar

    当键盘出现时,整个容器视图可以整体上移,保持输入区域可见。 5. **处理多个输入框**:如果界面中有多个输入框,需要考虑键盘弹出时的焦点切换。确保每次切换到新的输入框时,都能正确调整布局,使当前输入框可见...

    ios-键盘遮挡输入框处理.zip

    1. **调整输入框的位置**:通过监听键盘显示和隐藏的通知,如`UIKeyboardWillShowNotification`和`UIKeyboardWillHideNotification`,动态地修改输入框的frame,使其在键盘出现时上移,键盘消失时恢复原位。...

    ios-输出框和键盘的配合.zip

    当键盘即将显示时,可以将整个视图上移,使输入框露出;而当键盘即将隐藏时,再将视图恢复原位。 文件`JKTextViewAndUITextFieldInputLimit`可能包含了一个自定义的类别或子类,扩展了`UITextField`和`UITextView`...

    自适应UITextView和键盘位置对应的Demo

    然后计算`UITextView`需要上移的距离,更新其`frame`或使用`layoutIfNeeded`方法布局。 3. 处理键盘隐藏通知:在`UIKeyboardWillHideNotification`的回调中,移除之前因键盘显示而做出的布局调整,恢复`UITextView`...

    ios-CHTTextFieldHealper输入框上移、回收键盘.zip

    通过添加UITextField类目,使用runtime实现,TextField被遮挡时视图上移效果,点击空白回收键盘,不需要写一句代码,所有TextField全拥有此功能,可以控制是否开启,上移视图,以及距keyboard距离 更新:1.解决...

Global site tag (gtag.js) - Google Analytics