带有在 IB 中创建的自定义视图的 InputAccessoryView

Posted

技术标签:

【中文标题】带有在 IB 中创建的自定义视图的 InputAccessoryView【英文标题】:InputAccessoryView with custom view created in IB 【发布时间】:2020-06-12 14:12:27 【问题描述】:

我已经阅读了很多关于这个主题的材料,但其中大多数都是以编程方式创建自定义视图。

是否可以将 InputAccessoryView 与在 IB 中创建的自定义视图一起使用?在故事板中,我添加了 textInputView,其中我添加了文本视图和发送按钮等,如下面的屏幕截图所示。

我遵循了代码,因此出于某种原因删除了表格视图,因此我无法使其正常工作。我在情节提要中添加了表格视图。

我在这里只展示了与 InputAccessoryView 相关的代码。

class InputAccViewController: UIViewController, UITableViewDataSource, UITableViewDelegate 

    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var textView: UITextView!
    @IBOutlet weak var textInputView: UIView!
    // other code

    override var canBecomeFirstResponder: Bool  return true 

    override var inputAccessoryView:UIView 
       get
           return self.textInputView
       
   

    override func viewDidLoad() 
        super.viewDidLoad()

        textInputView.removeFromSuperview()
        // other code
    
     // other code tableview delegates etc...

左侧屏幕截图是不显示表格视图的附件视图代码。如果我注释掉与附件视图相关的代码,它会显示表格视图,如右侧屏幕截图所示。

【问题讨论】:

并且tableView显示没有输入附件视图? 它显示了 inputTextView,正如您在屏幕截图中看到的那样。在文本视图中输入确实会显示键盘。由于 tableview 没有显示我无法检查拖动以关闭功能。我不确定为什么在为附件视图添加代码后不显示表格视图?如果我删除附件视图,表视图就会出现。 如果你删除这一行会发生什么:'textInputView.removeFromSuperview()'? 【参考方案1】:

似乎您可能将UITableView 的底部限制在textInputView 的顶部。当您将textInputView 设置为inputAccessoryViewUIViewController 时,这不再按预期工作。将textInputView 设置为inputAccessoryView 时,请确保将UITableView 的底部限制为UIViewControllerview 的底部。

【讨论】:

我不得不进行一些猜测才能弄清楚这一点。如果您在将来发布新问题时提供有关实施的更多详细信息会更好。 我不确定这是否是约束问题,否则我会根据需要添加更多详细信息。

以上是关于带有在 IB 中创建的自定义视图的 InputAccessoryView的主要内容,如果未能解决你的问题,请参考以下文章

在具有动态高度的 IB uitableviewcell 中使用带有 XIB 的自定义视图

在 IB 中创建的静态 UILabel 显示缓慢

通过代码将标题/图标等设置为在 IB 中创建的 TabBarItem?

无法将内容添加到 IB 视图控制器中的自定义表格视图单元格

swift IB设计的自定义视图

iOS:如何保存在应用程序中创建的自定义对象