Ios 在UICollectionViewCell中添加/删除观察者
我正在使用下面的代码捕获collectionViewCell的帧更改Ios 在UICollectionViewCell中添加/删除观察者,ios,swift,observer-pattern,key-value-observing,Ios,Swift,Observer Pattern,Key Value Observing,我正在使用下面的代码捕获collectionViewCell的帧更改 class MovieCardCollectionViewCell: UICollectionViewCell { override init(frame: CGRect) { super.init(frame: frame) awakeFromNib() } required init?(coder aDecoder: NSCoder) { supe
class MovieCardCollectionViewCell: UICollectionViewCell {
override init(frame: CGRect) {
super.init(frame: frame)
awakeFromNib()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
awakeFromNib()
}
override func awakeFromNib() {
// configuring cell and views
contentView.addObserver(self, forKeyPath: "frame", options: .New, context: UnsafeMutablePointer<Void>())
}
deinit {
contentView.removeObserver(self, forKeyPath: "frame")
}
override func updateViews() {
// changing some views
}
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
if let key = keyPath {
switch (key) {
case "frame":
updateViews()
default: break
}
}
}
}
class MovieCardCollectionViewCell:UICollectionViewCell{
重写初始化(帧:CGRect){
super.init(frame:frame)
awakeFromNib()
}
必需的初始化?(编码器aDecoder:NSCoder){
super.init(编码者:aDecoder)
awakeFromNib()
}
重写func awakeFromNib(){
//配置单元格和视图
contentView.addObserver(self,forKeyPath:“frame”,选项:。新建,上下文:unsafemeutablepointer())
}
脱硝{
contentView.removeObserver(self,forKeyPath:“frame”)
}
重写func updateViews(){
//改变一些观点
}
重写func observeValueForKeyPath(键路径:String?,对象对象的类型:AnyObject?,更改:[String:AnyObject]?,上下文:UnsafeMutablePointer){
如果let key=keyPath{
开关(钥匙){
案例“框架”:
updateViews()
默认值:中断
}
}
}
}
但在发布观察家之前,我仍然得到UIView解除分配的错误
我对其他视图和其他对象使用相同的机制,效果很好
有什么想法吗?
当所有nib文件成功加载后,将调用awakeFromNib
。自己调用awakeFromNib
将导致此方法被调用两次,因此将注册两个观察者
一个好的做法是定义另一个方法,如func commonInit()
,从两个init
方法调用commonInit()
,并在commonInit
中注册观察者