标签: inputaccessoryview

键盘动画时UIInputView背景不可见

我有一个文本字段,其中包含UIInputView输入附件视图.

当我点击我的文本字段,键盘进入视图并且我可以看到附件视图的子视图,但它没有可见的背景.键盘动画完成后,UIInputView的背景将弹出视图.

在键盘动画仍在进行时,我该怎么做才能强制UIInputView的背景可见?

这是我的代码:

UIInputView *inputView = [[UIInputView alloc] initWithFrame:CGRectMake(0.0f, 0.0f,                 CGRectGetWidth(self.bounds), 44.0f) inputViewStyle:UIInputViewStyleKeyboard];

UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
button.frame = CGRectInset(inputView.bounds, 15.0f, 2.0f);
[button setTitle:@"Button" forState:UIControlStateNormal];
[inputView addSubview:button];

UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(0.0f, 0.0f, CGRectGetWidth(self.bounds), 44.0f)];
textField.inputAccessoryView = inputView;
[self addSubview:textField];
Run Code Online (Sandbox Code Playgroud)

objective-c uitextfield ios7 inputaccessoryview

8
推荐指数
1
解决办法
1014
查看次数

调整inputAccessoryView中的文本字段大小

UITextView整个星期都试图调整大小.我不知道应该怎么做,所以我决定包括几乎所有相关的代码.

我有这个对话视图:

会话视图

这conversationview是一个UIViewController具有UITableView内部(采用约束).我有一个自定义UIView子类ConversationToolbar设置为inputAccessoryView(UIViewController包含它可以成为第一个响应者,因此视图始终可见),包含2个子视图.一个用于UITextView左右按钮,一个用于表情符号.表情符号仅在点按左键时显示:

情感观

当选择一个时,它会以浮动标签显示:

浮动情绪

UITextView当使用多行时,我现在无法调整大小.我曾尝试自己计算所有帧,但那时似乎与我的约束以某种奇怪的方式发生冲突.几乎总是UITextView要么太小,要么仅在我按另一个键来更新视图后调整大小.或者在UITextView键盘上变大,或者当键盘被解除时它会滑出视野.

我已经从我的代码中删除了所有调整大小的功能,我想知道我需要做些什么才能调整大小.

在我的ConversationViewController:

var toolbar: ConversationToolbar!

override var inputAccessoryView: UIView! {
    get {
        if toolbar == nil {
            toolbar = NSBundle.mainBundle().loadNibNamed("ConversationToolbar", owner: nil, options: nil).last! as ConversationToolbar
            toolbar.frame.size = CGSize(width: UIScreen.mainScreen().bounds.size.width, height: 80)
            toolbar.delegate = self
            toolbar.setDraft(conversation.draft)
        }
        return toolbar
    }
}
Run Code Online (Sandbox Code Playgroud)

随着ConversationToolbar.xib:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="6254" …
Run Code Online (Sandbox Code Playgroud)

ios inputaccessoryview

8
推荐指数
1
解决办法
4543
查看次数

自定义inputAccessoryView作为UIView从nib给出错误:返回0宽度,假设UIViewNoIntrinsicMetric

我正在使用一个inputAccessoryView,它使用以下UIView子类从一个nib加载:

class CustomInputAccessoryView: UIView {

    @IBOutlet var containerView: UIView!
    @IBOutlet var contentView: UIView!
    @IBOutlet weak var button1: UIButton!
    @IBOutlet weak var button2: UIButton!
    @IBOutlet weak var textView: UITextView!        

    override var intrinsicContentSize: CGSize {
        return CGSize.zero
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        setupInputAccessoryView()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setupInputAccessoryView()
    }

    func setupInputAccessoryView() {
        self.translatesAutoresizingMaskIntoConstraints = false
        Bundle.main.loadNibNamed("CustomInputAccessoryView", owner: self, options: nil)
        addSubview(containerView)
        containerView.frame = self.bounds
    }

}
Run Code Online (Sandbox Code Playgroud)

我将视图分配给inputAccessoryView并通过以下方式设置它:

var customInputAccessoryView = CustomInputAccessoryView()
Run Code Online (Sandbox Code Playgroud)

inputAccessoryView正确加载并正确显示.问题是当我按下inputAccessoryView的textView并显示键盘时,我收到以下错误:

<_UIKBCompatInputView: ...; frame = …
Run Code Online (Sandbox Code Playgroud)

xcode xib ios inputaccessoryview swift

8
推荐指数
0
解决办法
374
查看次数

捕获iOS完成按钮单击.使用javascript/Jquery

在iOS浏览器表单上,附件栏显示"完成"按钮,下一个/上一个按钮可在字段之间移动.我想在附件栏上捕获完成按钮单击事件并执行一些自定义操作.欢迎使用JQuery/JQuery移动解决方案.

我不想使用模糊/焦点,因为即使在点击其他元素时也会调用模糊.我想在调用此完成按钮时提交表单,而在其他操作发生时不提交.

我已经尝试用keycode 13绑定keypress事件.但它只捕获当用户按下键盘底部的完成/提交键而不是附件栏上的按钮时的事件.

javascript jquery ios cordova inputaccessoryview

7
推荐指数
0
解决办法
2071
查看次数

如何在没有输入附件视图的情况下检测键盘高度?

我有一个带有自定义附件视图的键盘。我可以通过注册keyboardWillShowNotification通知来获得它的高度:

NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShowNotification(notification:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
Run Code Online (Sandbox Code Playgroud)

和回调处理程序:

@objc fileprivate func keyboardWillShowNotification(notification: NSNotification) {
    guard let keybrdEndFrame = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue else {
        return
    }
    print(">>>> height: \(keybrdEndFrame.size.height)")
}
Run Code Online (Sandbox Code Playgroud)

然而,在这keybrdEndFrame.size.height给了我键盘的高度 + 附件视图的高度。虽然在我的特殊情况下我知道附件视图的高度(因为我已经实现了它),所以我可以计算键盘的高度,我想知道是否有一个更通用的解决方案,我可以将计算与自定义附件视图。

所以我的问题是 - 有没有办法在没有附件视图的情况下检索键盘的高度?或者,有没有办法只检索当前与键盘一起显示的附件视图的高度?

uikeyboard ios inputaccessoryview

7
推荐指数
0
解决办法
553
查看次数

使用WKWebView修改键盘工具栏/附件视图

我正在使用WKWebView,将内容可编辑的div作为富文本编辑器的核心,并希望修改键盘上方的顶部工具栏,该工具栏包含自动更正建议和格式按钮。(不知道这是否算作输入的附件视图)。

我发现一些帖子显示了如何删除该栏,但它们似乎都不起作用,理想情况下,我还是想保留自动更正部分。

至少有一个应用程序Ulysses可以做到这一点(尽管我不知道它是否具有网络视图):

尤利西斯

确实,我非常确定我可以通过在键盘视图层次结构上进行手术来实现这一目标……但这似乎是一种乏味而脆弱的方法。

有没有更好的办法?

谢谢!

keyboard ios inputaccessoryview swift wkwebview

7
推荐指数
1
解决办法
2023
查看次数

SwiftUI 相当于 UIViewController 的输入附件视图,即键盘上方的视图始终可见,就像在 iMessage 中一样

UIViewController 上的简单输入附件视图

我想要一个像 iMessage 中那样的输入附件视图。该栏始终在屏幕底部可见。当 TextField 获得焦点时,键盘会跳入,并且栏会自动向上移动,同时停留在键盘顶部。

即使没有 TextInput 具有焦点,输入附件也必须可见

在 UIKit 中,ViewController 可以覆盖 inputAccessory 并成为第一个响应者。因此输入附件永久可见。我找不到在 SwiftUI 中执行此操作的方法。

键盘和配件必须缩小滚动视图

当键盘弹出时,保存消息并填充屏幕的滚动视图必须相应缩小。向下拖动滚动视图和交互移动键盘时也是如此。拖动时必须调整视图的大小。

最重要的是:向下拖动滚动视图并交互移动键盘时必须起作用

最重要的要求是,在拖动滚动视图(以交互方式向下移动键盘)时,这必须顺利工作。iMessage 或 WhatsApp 中的行为相同。输入附件必须在拖动时移动,并且滚动视图也必须调整大小。键盘关闭后,工具栏/输入附件必须在底部保持可见。

不是重复的

我阅读了InputAccessoryView / View Pinned to Keyboard with SwiftUI,但这与我的问题不相似。我需要工具栏可见,即使键盘未显示。此外,该问题中接受的答案在 iOS 15 中无法正常工作。拖动以关闭键盘会留下白色间隙。

UIKit 工作原理

在 UIKit 实现中,持有视图是一个带有键盘关闭交互集的 UITableViewController。这意味着,当显示键盘时,您可以拖动视图,并同时向下拖动键盘和附件视图,直到键盘消失。不过,附件视图仍然保留在底部。

在 UIKit 中的实现非常简单,如下所示。一切都是开箱即用的。

class ChatTableViewController: UITableViewController {
...

    override var inputAccessoryView: UIView? {
        return inputBar
    }

    override var canBecomeFirstResponder: Bool {
        return true
    }
...
}
Run Code Online (Sandbox Code Playgroud)

UIKit 实现看起来不错

UIKit 实现看起来不错

需要 SwiftUI 帮助(Xcode 13 beta 5、iOS 15) …

xcode ios inputaccessoryview swift swiftui

7
推荐指数
1
解决办法
2035
查看次数

iOS键盘 - 输入附件查看xib,自动布局不接收触摸事件

我已经构建了一个不断增长的UITextView连接到键盘,类似于股票消息应用程序,通过将.xib加载到键盘的inputAccessoryView中:

self.keyboardAccessoryView = [[[NSBundle mainBundle]
                             loadNibNamed:@"KeyboardAccessoryView"
                             owner:self options:nil]
                             firstObject];
Run Code Online (Sandbox Code Playgroud)

.xib看起来像这样,并且正在使用布局约束,以便当用户输入更多文本行时textView会垂直增长:

在此输入图像描述

旋转和一切都很好,除了一个大错误 - 当文本是多行时,只有最底线处理触摸事件.这意味着用户无法在UITextView内滚动,因为他们的触摸事件被传递到后面的(深灰色)视图并转而滚动.他们也无法在前3行选择和编辑他们的文字.

在此输入图像描述

我想我可以通过捕获所有点击事件的坐标并检查键盘是否打开以及UITextView有多高来做一个解决方法,然后选择正确的元素来接收触摸事件.但这是一个脆弱的解决方案,更复杂的旋转.在我的自动增长的文本视图方法中是否存在我缺少的东西,或者更容易修复?

keyboard xib ios autolayout inputaccessoryview

6
推荐指数
2
解决办法
4172
查看次数

在iOS中旋转时,inputAccessoryView的UIToolbar变黑

这是我的代码:

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    let keyBoardToolBar = UIToolbar(frame: CGRectMake(0, 0, self.view.frame.size.width, 44))
    keyBoardToolBar.barStyle = .Default

    let flexSpaceKeyboardBarButtonItem = UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: nil, action: nil)

    let doneKeyboardBarButtonItem = UIBarButtonItem(title: "Done", style: .Done, target: self, action: nil)

    let wordKeyboardBarButtonItem = UIBarButtonItem(title: "Button 1", style: .Plain, target: self, action: nil)

    var barItems: [UIBarButtonItem] = []
    barItems.append(wordKeyboardBarButtonItem)
    barItems.append(flexSpaceKeyboardBarButtonItem)
    barItems.append(doneKeyboardBarButtonItem)

    keyBoardToolBar.setItems(barItems, animated: true)

    self.myTV.inputAccessoryView = keyBoardToolBar
}
Run Code Online (Sandbox Code Playgroud)

当我转动设备时,UIToolBar变黑了(点击再次查看此GIF)

黑色

那么无论如何要修复它?谢谢!

顺便说一句:在模拟器中,我看不到UIToolBar变黑了.

uitoolbar ios inputaccessoryview swift

6
推荐指数
1
解决办法
944
查看次数

当alertController(actionSheet)出现时,inputAccessoryView会动画

我有一个聊天应用程序的inputAccessoryView,它始终保持可见状态,并且停靠在屏幕底部,用于类似于大多数消息收发应用程序的文本输入。

当我呈现带actionSheet样式的alertController时,在呈现警报时,inputAccessoryView会在屏幕外动画,然后在解除警报时再次备份。这又会滚动我的tableView,这是不可取的。

之所以发生这种情况,是因为在显示警报时,聊天viewController放弃了firstResponder。

无论如何,当它的视图resignsFirstResponder出现时,是否要呈现一个alertController而不放弃firstResponder,还是将inputAccessoryView停靠在屏幕底部?

xcode ios inputaccessoryview swift uialertcontroller

6
推荐指数
1
解决办法
664
查看次数