为 iCarousel 使用自定义 UIView

Posted

技术标签:

【中文标题】为 iCarousel 使用自定义 UIView【英文标题】:Using a Custom UIView for iCarousel 【发布时间】:2016-04-17 12:38:43 【问题描述】:

我正在尝试使用iCarousel 来显示一系列项目。我想为此重用一个故事板 UIView,所以我创建了一个 UIView 的自定义类。我还为此创建了一个 XIB 文件,并根据自己的喜好设置了视图。然后,我将我的观点的出口连接到班级。我现在正在尝试重新创建 UIView,以便我可以将它用于我的轮播。这是我自定义的 UIView 类:

这是我的轮播代码:

func numberOfItemsInCarousel(carousel: iCarousel) -> Int 
    return costs.count


func carousel(carousel: iCarousel, viewForItemAtIndex index: Int, reusingView view: UIView?) -> UIView 
    let rView = ReturnView(frame: CGRectMake(0, 0, 220, 220))
    rView.backgroundColor = UIColor.greenColor()
    print(rView.deleteBtn)//fatal error: Unexpectedly found nil when unwrapping an optional value
    return rView


从我的致命错误中可以看出,删除按钮不存在。这与我的其他元素相同。没有子视图出现:

如何让子视图出现在我的 iCarousel 上?感谢您的帮助。

【问题讨论】:

【参考方案1】:

在你的轮播功能中试试这个


var myView : UIView
if(myView != nil)

 myView = view as! ReturnView    

else
var topLevelObjects : NSArray = NSBundle.mainBundle().loadNibNamed("your_xib_name", owner: self, options: nil)
myView = topLevelObjects.objectAtIndex(0) as!  ReturnView

return myView 

您需要在当前视图之上从您的 xib 加载视图。确保您已将您创建的自定义视图的所有者标记为要添加轮播的 PRESENT 视图控制器

【讨论】:

【参考方案2】:

试试这个:

rView.addSubview(myButtonName)

对于“致命错误:展开可选值时意外发现 nil”,请尝试以下操作:

if deleteBtn != nil
print(rView.deleteBtn)

我真的不明白您要做什么,“打印一个按钮?”但这可能是这样做的适当方式。希望这会有所帮助... :)))

【讨论】:

以上是关于为 iCarousel 使用自定义 UIView的主要内容,如果未能解决你的问题,请参考以下文章

使用 iCarousel 时,我的自定义 UIView 显示但里面啥都没有?

将自定义 UIView 添加到 iCarousel

将带有自动布局的自定义 UIView 添加到 iCarousel

如何实现自定义的icarousel效果

向 iCarousel 项目添加自定义手势

使用自动布局将自定义 UIView 绘制为背景并将其居中