【问题标题】:How to toggle a word selection view (change height) in iOS custom keyboard?如何在 iOS 自定义键盘中切换单词选择视图(更改高度)?
【发布时间】:2014-07-29 07:27:41
【问题描述】:

我想在 iOS 8 自定义键盘中添加类似于上面的单词选择视图。

  1. 如何动态更改键盘视图矩形大小?和
  2. 通知活动应用(如内置消息应用)相应地重新定位输入栏?

更新:基于this,键盘高度是可定制的。这怎么可能?

【问题讨论】:

    标签: ios ios8 ios-app-extension


    【解决方案1】:

    您想根据输入更改输入附件视图的大小和内容。不是键盘的框架(输入视图)。您用红色矩形标记的区域是两种不同状态的输入附件视图。

    UIKit 发布与键盘相关的通知。

    • UIKeyboardWillShowNotification,
    • UIKeyboardDidShowNotification,
    • UIKeyboardWillHideNotification
    • UIKeyboardDidHideNotification

    侦听这些通知的对象可以获取与输入视图相关的几何信息(例如键盘的高度)以调整已编辑的视图。

    收到有关文本更改的通知。

    要根据输入更改输入附件视图,您必须首先观察其内容的变化。您可以通过实现UITextFieldDelegatetextField:shouldChangeCharactersInRange:replacementString: 来做到这一点 方法或监听UITextFieldTextDidChangeNotification

    [[NSNotificationCenter defaultCenter] addObserver:self    
                                             selector:@selector(handleTextFieldDidChangeNotification:) 
                                                 name:UITextFieldTextDidChangeNotification       
                                               object:_textFieldInInputAccessoryView];
    

    处理文本更改。

    关键是在文本字段发生变化时改变输入附件视图的内容和大小。 UIKit 将输入附件视图附加到输入视图(键盘)的顶部。如果您想在文本字段下方添加带有控件的额外行,您需要做的是更新输入附件视图的框架。

    - (void)handleTextFieldDidChangeNotification:(NSNotification *)notification
    {
         // Update the contents/frame of the input accessory view.
    
         // Reload the input views.
         [_yourTextField reloadInputViews];
    }
    

    基于文本Programming Guide for iOS - Custom Views for Data Input

    【讨论】:

    • 我的问题是关于扩展视图尺寸在自定义键盘内。这不是关于如何使用 from 应用程序的附件视图。自定义键盘是 iOS 8 的新功能。
    • 只是对这个答案的一个小修正:为输入附件视图突出显示的区域太大 - 它应该只是建议单词的单行。上面的控件属于原始文本字段。
    【解决方案2】:

    在当前 iOS 8 中可以更改键盘的大小

    逐字逐句摘自文档:“在 iOS 8.0 中,您可以在主视图最初在屏幕上绘制后随时调整自定义键盘的高度。

    要调整自定义键盘的大小,请添加一个简单的布局约束。

    CGFloat _expandedHeight = 500;
    NSLayoutConstraint *_heightConstraint = 
        [NSLayoutConstraint constraintWithItem: self.view 
                                     attribute: NSLayoutAttributeHeight 
                                     relatedBy: NSLayoutRelationEqual 
                                        toItem: nil 
                                     attribute: NSLayoutAttributeNotAnAttribute 
                                    multiplier: 0.0 
                                      constant: _expandedHeight];
    [self.view addConstraint: _heightConstraint];
    

    有关更多信息,请查看 Apple 的预发布文档 here

    【讨论】:

      【解决方案3】:

      您不能使用 iOS 8 中的自定义键盘 API 将键盘扩展到其默认框架之外。我在今年的 WWDC 上向一位 Apple 工程师询问了这个问题。

      【讨论】:

      • 很遗憾知道。感谢您的信息!
      • 此信息在最新的测试版中已过时。键盘可以调整大小。请参阅此部分:developer.apple.com/library/prerelease/ios/documentation/… 并在此页面(在您的浏览器中)搜索“高度”。引用文档 - “在 iOS 8.0 中,您可以在主视图最初在屏幕上绘制后随时调整自定义键盘的高度。”
      • 但是,您仍然不能在您请求的任何框架之外绘制。考虑屏幕截图 - i.imgur.com/aDSyGvl.png。我已经将键盘的大小(现在只是一个黑色视图)垂直调整为 320 点(比平时大),并在顶部添加了一个黄色子视图,高度为 40 点。但是只显示了 20 个点,因为键盘无法在其范围之外绘制。粗鲁的例子,但它有效。
      • @DevKanchen 非常非常有趣,感谢您提供的信息。
      • 您好,我正在使用 xocde beta 5 和 beta 6,想增加键盘的高度,但仍然无法正常工作。我使用与苹果文档中提供的相同的线。问题是什么?帮帮我
      猜你喜欢
      • 2015-04-18
      • 2017-04-20
      • 1970-01-01
      • 2014-10-18
      • 2017-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-11
      相关资源
      最近更新 更多