【问题标题】:@IBAction of UIBarButtonItem not being called from UIToolbar inside generic cell of tableviewUIBarButtonItem 的@IBAction 没有从 tableview 的通用单元格内的 UIToolbar 调用
【发布时间】:2018-06-15 08:43:35
【问题描述】:

事实上,我创建了一个如下所示的通用单元:

class GenericCell<T: ProtocolName>: UITableViewCell {

    // Properties ...

    var someThingINeed: T?

    private var toolbar: UIToolbar = {
        let toolbar = UIToolbar()
        toolbar.sizeToFit()
        toolbar.isUserInteractionEnabled = true

        let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(didTapDone))
        let flexibleSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
        let cancelButton = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(didTapCancel))

        cancelButton.tintColor = .red

        toolbar.setItems([cancelButton, flexibleSpace, doneButton], animated: false)

        return toolbar
    }()

    override var inputAccessoryView: UIView? {
        if someThingINeed != nil {
            return toolbar
        }
        return nil
    }

    override var canBecomeFirstResponder: Bool {
        return true
    }

    override var canResignFirstResponder: Bool {
        return true
    }

    // Functions ...

    @objc private func didTapDone() {
        // do something...
        resignFirstResponder()
    }

    @objc private func didTapCancel() {
        // do something...
        resignFirstResponder()
    }

}

所以为了调用单元格输入视图,我从处理具有该类型单元格的表格的UITableViewController 执行此代码:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    if indexPath.section == 0 {
        tableView.cellForRow(at: indexPath)?.becomeFirstResponder()
    }
    tableView.deselectRow(at: indexPath, animated: true)
}

我在执行中得到的结果是inputViewinputAccessoryView 都出现了,但是当我点击UIBarButtonItem 中的任何一个(取消或完成)时,按钮似乎会响应并接收点击,但不调用任何操作。

我认为原因可能是泛型 Swift 类不能作为 UIView 的目标,或者泛型 Swift 类不能实现 @objc 函数。

我不知道还能做什么,我尝试将单元格添加为UIToolbar 的代表并执行toolbar.translatesAutoresizingMaskIntoConstraints = false,但没有任何效果。

【问题讨论】:

    标签: ios swift uitableview generics uitoolbar


    【解决方案1】:

    好的,问题是我忘记将UIToolbar 标记为lazy,所以我无法使用类属性和函数。

    我不知道为什么 Xcode 没有对此发出警告...我认为这可以报告。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-13
      • 2015-07-19
      • 2018-01-28
      • 2013-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多