【问题标题】:UIPickerView: viewForRow not calledUIPickerView:未调用 viewForRow
【发布时间】:2017-02-01 14:34:21
【问题描述】:

我在设置 UIPickerView 时遇到问题。教科书都设置好了,想改字体大小,但是:

  1. 通过AttributeTitleForRow 改变字体大小没有效果(虽然改变颜色确实有效)

  2. viewForRow 从不被调用。 完全

我正在使用 Xcode 8 和 Swift 2.3 并针对 iOS 8+。以下是所有相关的代码:

Interface Builder (IB) 连接:

@IBOutlet weak var synapse: UIPickerView!

链接到 UIViewController 的 Delegate:

override func viewDidLoad() {
    super.viewDidLoad()

    // Préparation des gestionnaires de transition vers les différentes vues
    self.transitionManagerNav.sourceViewController = self
    self.transitionManagerNav.ordre = "travailleini2barrenav"

    self.transitionManagerDesk.sourceViewController = self
    self.transitionManagerDesk.ordre = "travailleini2desk"

    self.synapse.dataSource = self
    self.synapse.delegate = self

    dateEnCours = graphique.pointDeReference.dateComplete
}

委托实现:

// UIPICKERVIEWDELEGATE

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
    return 1
}

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return elementsDefileur.count
}

func pickerView(pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
    return 17
}

func pickerView(pickerView: UIPickerView, widthForComponent component: Int) -> CGFloat {
    return synapse.frame.width
}

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
}

func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
    print("[viewForRow]") // THAT never happens (and yes, I am looking at the correct output window :o)
    let pickerLabel = UILabel()
    pickerLabel.textColor = UIColor.redColor()
    pickerLabel.text = elementsDefileur[row]
    pickerLabel.font = UIFont(name: "Arial-BoldMT", size: 5)
    pickerLabel.textAlignment = NSTextAlignment.Left
    return pickerLabel
}

我已经尝试了所有我能想到的,包括从代码中删除并重新创建 UIPickerView,然后从 (IB),将委托链接移动到 viewWillAppear,titleForRow / attributesTitleForRow / viewForRow 的每个组合,清理项目等.

我该如何解决这个问题?

【问题讨论】:

  • 你是否在类名后面包含了 UIPickerViewDelegate ? (猜测名称,假设它是正确的。)即 class myViewController: UIViewController, UIPickerViewDelegate
  • 是的(抱歉忘记了):
  • 类travailleViewController:UIViewController,UIPickerViewDataSource,UIPickerViewDelegate {
  • 没关系。这是我最好的猜测,其他大多数事情看起来都很好。
  • 打印 elementsDefileur.count 并检查其中有多少对象。

标签: swift uipickerview


【解决方案1】:

您的委托函数声明中的属性名称是错误的。它应该是“reusingView”,而不是“reusing view”:

func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView

我相信 Apple 文档包含该错误。我有同样的问题,并通过修复上面的属性名称来解决它。

【讨论】:

  • 非常感谢蒂姆,你拯救了我的一天! (抱歉反馈迟了)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多