【问题标题】:UIPickerView is Selecting the Wrong Row-SwiftUIPickerView 选择了错误的行-Swift
【发布时间】:2015-06-01 00:23:54
【问题描述】:

所以我的 UIPickerView 没有按我想要的方式工作。它大约有 3/4 的时间可以正常工作,但另外 1/4 的时间不能正常工作。

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

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

}

func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView!) -> UIView
{
    activeQuizPlace = row
    var pickerLabel = UILabel()
    pickerLabel.textColor = UIColor.whiteColor()
    pickerLabel.text = listsArray[row]
    pickerLabel.font = UIFont(name: "Georgia", size: 22)
    pickerLabel.textAlignment = NSTextAlignment.Center
    return pickerLabel
}

listsArray 包含 5 个项目(它们是字符串)。第 0-2 行 100% 的时间都能正常工作。 However when row 3 is selected it occasionally says that row 1 was, and when row 4 is selected it sometimes says that row 2 was.我认为这个问题与我控制 UIPickerView 的最后一个函数有关。我刚刚从该网站复制了该代码,以更改文本的颜色和字体。在我使用这个功能之前,我从来没有遇到过问题,或者至少从来没有注意到一个问题。旁注:我使用的是 Xcode 6.3.2

我需要一种方法让选取器视图正常工作,并且能够更改其字体和颜色。我很想得到帮助 我一直在网上寻找答案 2 小时,但无法弄清楚我做错了什么,提前谢谢!

【问题讨论】:

  • 您也可以发布您的 didSelectRow 方法吗?
  • 这是我使用的与选择器视图相关的所有代码。这是我第一次使用 UIPicker 视图,所以我不确定我到底在做什么,也许没有这就是问题所在?我只是在最后一个方法中使用 activeQuizPlace = row 获取行值
  • 嗨,所以如果我没记错的话,您正在使用 activeQuizPlace 值来获取用户选择的哪一行,对吧?这不是正确的方法。要正确处理选择,您需要实现 UIPickerViewDelegate 协议并实现 didSelectRow 方法。查看本教程:sourcefreeze.com/ios-uipickerview-example-using-swift
  • 那是正确的。我浏览了那个教程并在那里使用了 didSelectRow 方法,它解决了这个问题。谢谢!

标签: ios swift cocoa-touch uipickerview


【解决方案1】:

我认为您需要从您显示的代码中删除activeQuizPlace = row 行,然后在下面添加此函数。

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

您使用的函数不是使用用户选择的索引调用的,而是使用系统绘制视图所需的索引调用的。

建议的功能应该是您所追求的功能(希望如此)。

【讨论】:

  • 解决了!感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多