【问题标题】:How to dismiss the keyboard on a UITextView on a modally presented UITableView如何在模态呈现的 UITableView 上关闭 UITextView 上的键盘
【发布时间】:2020-09-20 00:54:17
【问题描述】:

晚上好,

我正在尝试关闭模态呈现的 UITableView 上的键盘。 UITextView 创建为 UINib 并在 UITableView 中注册。

我尝试在情节提要中将键盘设置为“Dismiss On Drag”,但没有任何效果。我还写了以下代码,并在UINib上连接了UITextFieldDelegate

这是UITextView Nib 中的代码。

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
          if(text == "\n") {
              textView.resignFirstResponder()
              return false
          }
          return true
      }

查看已加载:

override func awakeFromNib() {
    super.awakeFromNib()
    textView.delegate = self
}

【问题讨论】:

  • 您可能需要提供更多关于您的结构的信息。我刚刚做了一个快速测试:带有UITextField ... UITableViewControllerDismiss on Drag 在表格视图上设置的自定义单元格... 以模态方式呈现... 点击单元格的文本字段开始编辑,然后出现键盘...然后我在表格视图上向下拖动一点,键盘被关闭。
  • 不是 UITextField,是 UITextView。
  • 我看不出使用UITextFieldUITextView 有什么区别 - 键盘会以任何一种方式正确关闭...当然,如果我正在滚动 within 文本视图它不会关闭键盘(这是我们不想要的)。也许尝试组合一个minimal reproducible example,因为似乎必须发生其他事情。

标签: ios swift uitableview uitextview


【解决方案1】:

使用滚动视图,这是一个示例,因为我不太了解您在项目中要做什么...首先将包含您的 textView 的控制器设置为 UIScrollViewDelegate,然后声明您的对象及其属性:

class YourController: UIViewController, UIScrollViewDelegate {

let scrollView2: UIScrollView = {
    let scrollView = UIScrollView()
    scrollView.translatesAutoresizingMaskIntoConstraints = false
    return scrollView
}()

let textV: UITextView = {
    let v = UITextView()
    v.backgroundColor = .yourColor
    v.isUserInteractionEnabled = true
    v.textColor = .white
    v.font = .systemFont(ofSize: 20, weight: .regular)
    v.translatesAutoresizingMaskIntoConstraints = false
    v.heightAnchor.constraint(equalToConstant: 1000).isActive = true // assign here the text view height to allow your scrollview to scroll
    return v
}()

override func viewDidLoad() {
    super.viewDidLoad()
    
    view.backgroundColor = .white
    scrollView2.delegate = self

    setupConstraints() // call the function for constraints
}

下面viewDidLoad写约束函数:

fileprivate func setupConstraints() {
    
    view.addSubview(scrollView2)
    scrollView2.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
    scrollView2.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
    scrollView2.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
    scrollView2.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
    
    scrollView2.addSubview(textV)
    textV.leadingAnchor.constraint(equalTo: scrollView2.leadingAnchor).isActive = true
    textV.trailingAnchor.constraint(equalTo: scrollView2.trailingAnchor).isActive = true
    textV.topAnchor.constraint(equalTo: scrollView2.topAnchor).isActive = true
    textV.bottomAnchor.constraint(equalTo: scrollView2.bottomAnchor).isActive = true
    // this is important for scrolling
    textV.widthAnchor.constraint(equalTo: scrollView2.widthAnchor).isActive = true
}

现在调用 scrollViewWillBeginDragging 并将交互模式分配给您的滚动视图键盘DismissMode:

func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
    scrollView2.keyboardDismissMode = .interactive
}

这是结果

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    相关资源
    最近更新 更多