ios - UIBarButtonItem 的 @IBAction 未从 tableview 的通用单元格内的 UIToolbar 调用

标签 ios swift uitableview generics uitoolbar

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

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()
    }

}

因此,为了调用单元格输入 View ,我从处理具有该类型单元格的表格的 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 的委托(delegate)并执行 toolbar.translatesAutoresizingMaskIntoConstraints = false 但没有任何效果。

最佳答案

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

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

关于ios - UIBarButtonItem 的 @IBAction 未从 tableview 的通用单元格内的 UIToolbar 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50871993/

相关文章:

ios - Swift 2.0 按属性对对象数组进行排序

ios - objective-c : how to inherit category methods loaded in a parent class?

ios - 在进行最小滚动或点击之前,单元格不会显示在表格 View 中(注意 : nothing happens on a background thread)

iphone - 使用 APParallaxHeader 显示图像时出现问题

ios - AppDelegate Swift 中的 reloadData

ios - 在 UIView 中隐藏非子 UIView

ios - iOS 中的随机颜色

ios - 在 iOS 的 UITabbarcontroller 中添加 Actionsheet

ios - XCode 7/Swift 2 的字典类型速记语法错误

ios - 如何从 UITableViewCell 的 UIContextualAction 显示弹出窗口 UIAlertController?