我正在使用Swift Bond进行数据绑定。我正在尝试将ViewController中的UIImageView
图像变量绑定到ViewModel中的Observable
变量,以观察图像的设置时间。完成以下方法后,当我从UIImageView
设置image
' ViewController
时,Observable
变量的observeNew()
方法不叫。我希望它会被调用。我有一些其他的数据绑定,他们工作。我在代码段中包含了一个。
的ViewController
class PostViewController: UIImagePickerControllerDelegate {
var viewModel: PostViewModel!
var caption: UITextField!
var postImageView: UIImageView!
init() {
viewModel = PostViewModel()
super.init(nibName: nil, bundle: nil)
}
override func viewDidLoad() {
-- view setup omitted --
view.addSubview(caption)
view.addSubview(postImageView)
createBindings()
}
private func createBindings() {
-- other data bindings omitted --
caption.bnd_text.bindTo(viewModel.caption)
postImageView.bnd_image.bindTo(viewModel.postPhoto)
}
func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) {
// I would expect setting the image here would trigger the binding and observeNew() would be called
postImageView.image = image
picker.dismissViewControllerAnimated(true, completion: nil)
}
}
视图模型
class PostViewModel {
let caption = Observable<String?>("")
let postPhoto = Observable<UIImage?>(nil)
init() {
caption.observeNew({ text in
// Prints text when caption: UITextField is edited
print(text)
})
postPhoto.observeNew({ image in
// Doesn't print statement when postImageView: UIImageView is set
print("Post received a new image")
})
}
}
我已经尝试了很多不同的方法来观察UIImageView的任何变化,但没有观察到:
viewModel.postPhoto.bindTo(postImageView.bnd_image)
并更改viewModel.postPhoto
的值viewModel.postPhoto.bidirectionalBindTo(postImageView.bnd_image)
我已经阅读Bond Demo app他们将viewModel用于UIImageView绑定
我已经检查了Unit tests他们在哪里测试UIImageView绑定
我已经阅读了一些教程,包括this one
我还在UIImageView
对象image
变量(例如bnd_backgroundColor
)上尝试了其他数据绑定,并在动作时更改背景颜色以查看是否Observable
被称为,但它不是,所以我一定做错了,但我不确定它是什么......
我只是想知道UIImageView
的图像何时发生变化。