测试已测试 | ✗ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布最后发布 | 2017年6月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由 Mohamed Matloub 维护。
UIBinder 帮助您将对象映射到视图,因此您无需再编写任何代码。
label.text = object.name
textView.text = object.description
textField.text = object.age
UIBinder 会为您完成所有这些。
要运行示例项目,请克隆仓库,然后首先从 Example 目录运行 pod install
。
请查看以下代码片段以获取实现示例,或查看示例项目。
self.view.bindSubviewsWith( object)
其中对象是 NSObject 或包含更新当前视图所需值的字典
在 Storyboard 中,您需要为所需视图设置 param
,其中在将对象传递给 bindSubviewsWith
时为字典,则 param
是键,如果是 NSObject,则 param
是属性名
然后您就完成了,当您运行代码时,您将发现视图已经更新为您传递给它的对象中的正确值
如果您只想更新某些视图,可以使用
view.bindTo(object)
您可以使用它来为正确的单元格绑定数组中的每个对象
cell.bindSubviewsWith(arr[indexPath,row])
首先,我们来说说您需要在 Storyboard 中设置什么
param
它支持 String 或 UIImage,如果是 UIImage,将设置到 ImageView 中;如果是字符串,则表示它是 URL,UIBinder 将尝试为您下载该图像
placeHolderImage
代表在图像加载完毕之前将设置的图像
errorImage
在无法获取在 param
中设置的图像时将设置的图像
completeUrl
如果您知道包含所需图像的 URL,可以将它传递给 completeUrl
现在,在将 URL 的值传递给图像后,无论是使用 completeUrl
还是 param
,就需要下载它了
UIBinder依赖于AlamofireImage
来下载图片,所以如果你向imageView传入带有图片的url,UIBinder会为你下载图片。
如果你需要自定义下载过程中的任何内容,你可以实现ImageDownloadDelegate
并覆盖以下方法:
func downloadImageWith(url: String, onSucces completion: @escaping ((UIImage) -> ()), onError errorCompletion: @escaping (UIImage, Error) -> ())
url
:是传递给imageView的url,在param
或completeUrl
中。onsuccess
:你将返回要设置为imageView的图片。onError
:你将传入要设置为imageView的图片以及要传递给ImageDownloadListener
的错误。这是一个协议,你需要在实现以下内容后才能得知图片下载成功或下载失败的情况:
func imageDidDownload(downloadedImage : UIImage)
func imageFailedToDownloadWith(error : Error)
1- 分开设置到每个UIViewController中
self.imageView.downloadDelegate = CustomDownloadDelegate()
self.imageView.downloadListener = CustomDownloadListener()
2 - 在app delegate中对应用中的每个图片进行设置
ImageManager.sharedManager.imageDownloadDelegate = CustomImageDownloader()
ImageManager.sharedManager.imageDownloadListener = CustomImageDownloader()
UIBinder使用AlamofireImage
图片缓存
对于其他不受支持的UIView或自定义View,你可以这样做:
extension UITextView{
override public func bindTo(_ object : NSObject){
// if object is dictionary then you will use
if let dic = object as? NSDictionary {
self.text = self.getStringValueFromDictionary(dic: dic)
return
}
// else first check if param has value not nil then get string represtation of this value
if let param : String = self.param {
if let value = object.getPropertyValueWith(label :param) {
if let v = value as? String {
self.text = v
}else if let text = object.getPropertyValueWith(label :param) {
self.text = String(describing: text)
}
}
}
}
}
UIBinder可通过CocoaPods获得。要安装它,只需将以下行添加到您的Podfile:
pod "UIBinder"
MohamedMatloub, [email protected]
UIBinder适用于MIT许可证。更多信息请参阅LICENSE文件。