在 UITextField 上点击时将 UIButton 移动到键盘上方

Posted

技术标签:

【中文标题】在 UITextField 上点击时将 UIButton 移动到键盘上方【英文标题】:Move UIButton above Keyboard when tapped on UITextField 【发布时间】:2016-03-10 06:42:50 【问题描述】:

我有 3 个文本字段和 2 个按钮。当我点击文本字段时,键盘会出现,并且由于键盘而隐藏了 2 个按钮。是否可以移动键盘上方的按钮,当键盘退出时,按钮应该回到初始位置。

【问题讨论】:

【参考方案1】:
//Declare a delegate, assign your textField to the delegate and then 

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];
    return YES;



- (BOOL)textFieldShouldEndEditing:(UITextField *)textField 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil];

    [self.view endEditing:YES];
    return YES;



- (void)keyboardDidShow:(NSNotification *)notification

    // Assign new frame to your view 
    [self.view setFrame:CGRectMake(0,-110,320,460)]; //here taken -20 for example i.e. your view will be scrolled to -20. change its value according to your requirement.



-(void)keyboardDidHide:(NSNotification *)notification

    [self.view setFrame:CGRectMake(0,0,320,460)];

编辑:- 使用 [UIScreen mainScreen] bounds].size 为 View 分配宽度和高度

【讨论】:

【参考方案2】:

最好的方法是使用库,这里是链接https://github.com/michaeltyson/TPKeyboardAvoiding,您需要做的就是获取 UIScrollView 中的所有文本字段和按钮,并在情节提要中将滚动视图类指定为“TPKeyboardAvoidingScrollView”。 视图控制器类中将有零行代码来管理您的需求,并且您可以在整个应用程序中的任何位置执行此操作。

【讨论】:

我怀疑这是否是实现这一目标的“最佳”方式。这当然可能是一种简单的方法,但为这么小的任务添加第三方库会带来开销。 要实现这一点,只需从这个库中添加一个类,它几乎没有 8 kb 大小,而且添加这一类节省了大量的手动编码和时间,所以我觉得值得使用。 嗯,我个人试过了,它不是一个简单的解决方案。我按照您和使用指南的建议做了,但我遇到了崩溃。我不会花任何时间学习如何将库集成到可以在本地轻松实现的东西上。 好的,很好。当我第一次使用这个库时,集成几乎不需要 15 分钟。无论如何,自己实现它本身也不错。祝你好运。【参考方案3】:

是的,您可以更新视图框架/约束,以便向用户显示按钮。

此外,您可以创建一个工具栏,其中包含这些按钮。当文本字段聚焦时,您可以在键盘上方添加工具栏。

这将是更好的用户体验。

【讨论】:

我有按钮的颜色和尺寸。工具栏不会显示。它将显示默认的 所以你需要更新文本字段和按钮的框架/约束。【参考方案4】:

最好使用滚动视图,或者为了您的方便修改下面的代码。

  override func viewDidLoad() 
        super.viewDidLoad()


        let tapGesture = UITapGestureRecognizer(target: self, action: "tap:")
        view.addGestureRecognizer(tapGesture)
        self.txtUserEmail.delegate = self;
        self.txtPassword.delegate = self;

    

   func tap(gesture: UITapGestureRecognizer) 
        self.txtUserEmail.resignFirstResponder()
        self.txtPassword.resignFirstResponder()
    

【讨论】:

以上是关于在 UITextField 上点击时将 UIButton 移动到键盘上方的主要内容,如果未能解决你的问题,请参考以下文章

如何在取消按钮的 Web 服务中发布 uitextfield 数据

如何通过在焦点集中时将其移动到键盘顶部/视图中心来突出显示滚动视图中的焦点 UITextField

UITableView 中的 UITextField 没有成为第一响应者

IQKeyboardManager 在 UITextField 上点击时隐藏键盘

按下返回键时如何在下一个 UITextField 上移动控件

如何在点击时出现键盘时管理UITextField的高度?