带有 .xib 文件的 UIPickerView 自定义布局

Posted

技术标签:

【中文标题】带有 .xib 文件的 UIPickerView 自定义布局【英文标题】:UIPickerView custom layout with .xib files 【发布时间】:2015-07-04 10:19:05 【问题描述】:

我正在尝试创建一个自定义 UIPicker,其中每个项目都是一个 .xib 文件实例。

我收到Array index out of range 错误,代码如下:

func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView!)->UIView 
        return NSBundle.mainBundle().loadNibNamed("CustomItem", owner: self, options: nil)[0] as! UIView

【问题讨论】:

【参考方案1】:

你需要检查这两个条件。

.xib 文件需要在顶层包含至少一个视图和 该文件确实被命名为“customItem.xib”(而不是“CustomItem”或其他名称)。

如果是这样,您的代码应该可以工作。

【讨论】:

我添加了一个图像,重命名了我的 xib 文件但不起作用:|【参考方案2】:

正如 Mundi 所说,您正在做的事情应该有效,但可能效果不佳。

我预测这样做会太慢,并且会使您的选择器视图“结结巴巴”。

您发布的代码的另一个问题是,每次选择器请求视图时,它都会创建加载视图的新副本。如果用户滚动选择器视图然后回滚,则将重新创建先前加载的单元格。

我建议您在首次加载选取器视图时将视图预加载到数组中。然后只需在拾取器视图询问它们时从数组中获取视图。

【讨论】:

我知道,但问题在于加载 xib 文件,我可以重用加载的布局。有什么建议吗?! 将其分解为更简单的步骤并一次调试一个。【参考方案3】:

我在.xib 文件中将根视图从Custom View 更改为View

但不支持拖动 View,我从 github 示例项目中复制了 .xib 文件。

【讨论】:

以上是关于带有 .xib 文件的 UIPickerView 自定义布局的主要内容,如果未能解决你的问题,请参考以下文章

带有图像的自定义 UIPickerView 皮肤

从 Textfield.inputview 加载 xib UIView

带有 .PLIST 的 Detailview 中的 UIPickerView

UIViewController 中的 iPhone UIPickerView

带有 Xib 文件的 UIView 的子类

带有自定义 xib 的 TableCellView 未加载