gpt4 book ai didi

ios - 当在其他 UIBarButtonItem 中使用相同的 subview 时,我在 UIBarButtonItem 中的 customView 的 subview 消失

转载 作者:搜寻专家 更新时间:2023-11-01 07:32:35 30 4
gpt4 key购买 nike

这就是我自定义 UIBarButtonItem 的方式:

if DBAppSettings.imageViewForCartBarButtonItem == nil {
DBAppSettings.imageViewForCartBarButtonItem = UIImageView(frame: CGRectMake(5, 5, 30, 30))
DBAppSettings.imageViewForCartBarButtonItem.backgroundColor = UIColor.greenColor()
}

let wrapperView = UIView(frame: CGRectMake(0, 0, 40, 40))
wrapperView.backgroundColor = UIColor.yellowColor()

wrapperView.addSubview(DBAppSettings.imageViewForCartBarButtonItem)
let cartBarButtonItem = UIBarButtonItem(customView: wrapperView)

一旦我设置了我的 UIBarButtonItem 它看起来没问题:

enter image description here

但是当我从导航堆栈中按下然后弹出 View Controller (这意味着我使用相同的绿色 subview 将其加载到另一个 UIBarButtonItem)时,它是黄色的。看起来绿色 subview 已被释放。为什么?

enter image description here

这就是我保持对绿色 subview 的引用的方式:

class DBAppSettings: NSObject {
static var imageViewForCartBarButtonItem: UIImageView!
}

注意:

当我在本地保留绿色 subview 时,一切正常:

let green = UIImageView(frame: CGRectMake(5, 5, 30, 30))
green.backgroundColor = UIColor.greenColor()

wrapperView.addSubview(green)

最佳答案

正如我在评论中所写。 UIView 可以只有一个 super View 。如果您第二次将它添加为 subview ,它将从第一个 super View 中删除,然后添加到新的 super View 中。检查 addSubview... 文档:

Views can have only one superview. If view already has a superview and that view is not the receiver, this method removes the previous superview before making the receiver its new superview.

它没有被释放。它刚刚从您的第一个 wrapperView 中删除。

您可以使用自定义工厂方法,如下所示:

extension UIBarButtonItem {

static func myBarButtonItem() -> UIBarButtonItem {
let imageView = UIImageView(frame: CGRectMake(5,5,30,30))
imageView.backgroundColor = UIColor.greenColor()

let wrapperView = UIView(frame: CGRectMake(0, 0, 40, 40))
wrapperView.backgroundColor = UIColor.yellowColor()
wrapperView.addSubview(imageView)

return UIBarButtonItem(customView: wrapperView)
}

}

即使使用 UIImage 也不要害怕。 UIImage 被缓存,共享,...一个图像在内存中不是多次,只有一次。谈论UIImage & init?(named name: String)

在每个 UIViewController 中,只需使用 UIBarButtonItem.myBarButtonItem()wrapperViewimageView 和一个 UIImage 的多个实例。

关于ios - 当在其他 UIBarButtonItem 中使用相同的 subview 时,我在 UIBarButtonItem 中的 customView 的 subview 消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31648963/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com