代表团没有工作Swift

时间:2016-12-23 06:15:28

标签: ios swift uitableview protocols delegation

我试图在Swift上实现委托模式。该过程包含一个弹出窗口,该弹出窗口从文本选择中的UIMenuItem显示在textView上。这个popover是一个包含一些颜色的TableViewController。轻触单元格(或颜色)时,所选文本会将其颜色从黑色更改为所选颜色。我在发送类中有以下协议:

protocol SelectedColorDelegate {
func didSelectColorCell(color: UIColor)
}

然后在发送类中我创建了这个属性:

var colorCellDelegate: SelectedColorDelegate?

在作为发送类的tableViewController(popover)的方法didSelectRowAtIndexPath中,我分配了所需的参数:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let color = arrayOfColorValues[indexPath.row]
    self.colorCellDelegate?.didSelectColorCell(color: color)
}

在我的接收类中,这是一个ViewController我设置协议SelectedColorDelegate,并使用此方法符合它,旨在更改textColor:

func didSelectColorCell(color: UIColor) {
    let textRange = noteTextView.selectedRange
    let string = NSMutableAttributedString(attributedString: noteTextView.attributedText)
    string.addAttribute(NSForegroundColorAttributeName, value: color, range: textRange)
    noteTextView.attributedText = string
    noteTextView.selectedRange = textRange
}

但是最后一个方法永远不会被调用,点击popover的单元格什么都不做,我错过了什么或做错了什么?谢谢!! :)

3 个答案:

答案 0 :(得分:2)

首先将您的协议定义为仅用于类

protocol SelectedColorDelegate: class {
    func didSelectColorCell(color: UIColor)
}

其次,我们希望我们的代表保留

weak var colorCellDelegate: SelectedColorDelegate?

最后在显示其他视图时或在viewDidLoad中设置委托,例如:

class YourViewController: SelectedColorDelegate {
    final override func viewDidLoad() {
        super.viewDidLoad()

        self.colorCellDelegate = self
    }
}

Tutorial - How To Make Weak Delegates In Swift

答案 1 :(得分:0)

你做过:xxViewController中的xxTableViewController.colorCellDelegate = self吗?

你的代表声明应该是弱的:

weak var colorCellDelegate: SelectedColorDelegate?

答案 2 :(得分:0)

在PopOverTableViewController中,设置应该看起来像 -

class PopOverTableViewController: UITableViewController, SelectedColorDelegate {

    override func viewDidLoad() {
          super.viewDidLoad()
          self.colorCellDelegate = self
    }
}