带有 .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 自定义布局的主要内容,如果未能解决你的问题,请参考以下文章
从 Textfield.inputview 加载 xib UIView
带有 .PLIST 的 Detailview 中的 UIPickerView