自定義一個AlretVIew,通過xib和view關聯,可自由定製,可複用。
通過代碼創建一個UIView子類,在這個子類內部對view進行一定的設定,通過傳入的數據模型動態改變view的顯示,這樣定義的子類一般複用性強, 但是創建UIView類的時候不能同時創建xib文件。
有沒有方法可以像自定義UITableViewCell一樣,創建一個自定義的UIView類關聯到一個Xib文件,這樣可以減少很多佈局代碼。方法是先創建UIView的子類,這裏是JZDialogView,然後再創建一個JZDialogView.xib文件
然後將View的Custom Class 項中的 Class 設置成JZDialogView,File's Owner 的CustomClass 可以不用管,
但是 View 的一定要設置,設置完應該是這樣的
View的名字自動變成了 Dialog View
現在可以自由定製xib文件,隨意添加組件,將需要隨數據改動的組件關聯到JZDialogView.h,像這樣
在JZDialogView.m中 重寫awakeFromNib方法
- (void)awakeFromNib {
[self initframe];
}
- (void)initframe
{
[self setFrame:CGRectMake(0, 0, fDeviceWidth, fDeviceHeight)];
self.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.4];
self.dialogView.layer.cornerRadius=10;
self.dialogView.layer.masksToBounds = YES;
}
-(void) setModel:(repayDetailModel *)model
{
_model = model;
_capitalLabel.text = _model.capital;
_commissionLabel.text = _model.commission;
_refundMLabel.text = _model.refundM;
_fineForLatePaymentLabel.text = _model.fineForLatePayment;
_countLabel.text =_model.count;
/**
這裏可以根據model的內容計算,決定view該怎麼顯示,是否需要隱藏或者顯示一些組件等等,各個組件的大小位置也可以變化
然後再 modifyLayout修改更新
*/
[self modifyLayout];
}
-(void) modifyLayout{
}
+(id) loadDialogView
{
return [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self) owner:nil options:nil][0];
}
-(IBAction)dismiss
{
[self removeFromSuperview];
}
在需要使用的的地方
JZDialogView *dia = [JZDialogView loadDialogView ];
[dia setModel:[_data objectAtIndex:0]];
[self.view addSubview:dia];
源碼下載地址:http://download.csdn.net/detail/jasonjz/9303115