自定义一个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