【问题标题】:Swift Delegation - Use Stepper in Tableview Cell to Update Label in Separate ClassSwift 委派 - 在 Tableview 单元中使用步进器来更新单独类中的标签
【发布时间】:2017-09-07 15:16:13
【问题描述】:

我一直在查看 stackoverflow 并阅读了很多与委派相关的不同问题,但我还没有解决我的问题。我试图让我的 stepperAction(在 tableview 单元格内)每次单击时更改我的 BuyStats 类中的标签。但到目前为止,单击步进器没有任何效果。我想我需要在 BuyStats.viewDidLoad() 中以某种方式设置委托,但我没有得到它。这对某人来说可能很容易。谢谢你的帮助。

protocol SetRemainingValue : class {
func setValue(amount: Double)
}
}

//

class BuyStatsCell: UITableViewCell{

weak var setRemaining : SetRemainingValue?

@IBAction func stepperAction(_ sender: UIStepper) {

    setRemaining?.setValue(amount: sender.value)
}

//

class BuyStats: UIViewController, SetRemainingValue {

   @IBOutlet weak var spendAmount: UILabel!

override func viewDidLoad(){

}

 func setValue(amount: Double) {

    spendAmount.text = amount

}

}

【问题讨论】:

  • 你在哪里创建了BuyStatsCell 对象?您需要在 BuyStats 类中的某处设置 obj.setRemaining = self。否则谁是BuyStatsCelldelegate 未定义,您通过委托传递的消息将不会生效。要了解有关这些协议和委托如何工作的更多信息,您可以查看this answer

标签: swift protocols delegation


【解决方案1】:

如果您使用动态UITableView,您可以在cellForRowAtIndexPath 中尝试以下操作:

  1. 使用dequeueCellWithReuseIdentifier 初始化单元格时,将其转换为BuyStatsCell(可能使用as! BuyStatsCell)以访问其类变量。
  2. 使用cell.setRemaining = self 设置委派。 self 的使用假定您的 tableView 的 cellForRowAtIndexPathBuyStats viewController 类中。如果不是,您需要在 tableView 的代码所在的类中获取 BuyStats 对象的引用,并使用该引用代替 self,例如 cell.setRemaining = /*yourBuyStatsObjectReferenceGoesHere*/

希望对您有所帮助。

【讨论】:

  • 谢谢,这成功了!我发现我必须将引用传递两次才能将其传递给我的 tableview 代码。
猜你喜欢
  • 2017-08-10
  • 1970-01-01
  • 2020-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-05
  • 1970-01-01
相关资源
最近更新 更多