通过xib自定义view
步骤:
1、先新建自定义view文件
1.02、新建view文件
2.03、设置File's Owner与View的class(如下图3.1),注意这里两个都要设置,如果只设置View的class,后面会出现无法响应点击事件与设置代理等等,基本只能展示静态的界面。
3.0 3.14、在.h文件中写好了变量、IBAction、delegate等之后接下来就要在File's Owner中也对应拖拽上这些变量(如下图4.0)。之前我由于只设置了View中的这些变量,导致View怎么都不响应IBAction和delegate,我在代码中设置的动态改变Constraint也不起作用。为什么会这样后面的代码会做说明。
4.05、在.m文件中实现初始化代码
- (id)initWithFrame:(CGRect)frame {
self= [superinitWithFrame:frame];
if(self) {
return[selfbaseInit];
}
returnself;
}
- (UIEnterAlertView*)baseInit {
CGRectframe =self.frame;
frame.size.width=MAIN_SCREEN_SIZE.width;
frame.size.height=MAIN_SCREEN_SIZE.height;
[selfsetFrame:frame];
UIEnterAlertView*view =nil;
NSArray*objects = [[NSBundlemainBundle]loadNibNamed:@"UIEnterAlertView"owner:selfoptions:nil];
for(idobjectinobjects) {
if([objectisKindOfClass:[UIEnterAlertViewclass]]) {
view = object;
break;
}
}
[selfaddSubview:view];
[selfaddChangeValueNotification];
returnself;
}
- (void)layoutSubviews {
CGRectframe =self.frame;
frame.size.width=MAIN_SCREEN_SIZE.width;
frame.size.height=MAIN_SCREEN_SIZE.height;
[selfsetFrame:frame];
}
基本上初始化的代码就是这部分,之前没有在File's Owner中设置变量的时候,IBAction、delegate没有响应的原因是NSArray*objects = [[NSBundlemainBundle]loadNibNamed:@"UIEnterAlertView"owner:selfoptions:nil];这段代码相当于重新生成了一个对象,这个对象与本生的self是两个不同的对象,而且两者没有关联,于是IBAction、delegate等变量作用在了不同的对象时,根本不会响应事件。