通过xib自定义view

步骤:

1、先新建自定义view文件

通过xib自定义view_第1张图片
1.0

2、新建view文件

通过xib自定义view_第2张图片
2.0

3、设置File's Owner与View的class(如下图3.1),注意这里两个都要设置,如果只设置View的class,后面会出现无法响应点击事件与设置代理等等,基本只能展示静态的界面。

通过xib自定义view_第3张图片
3.0
通过xib自定义view_第4张图片
3.1

4、在.h文件中写好了变量、IBAction、delegate等之后接下来就要在File's Owner中也对应拖拽上这些变量(如下图4.0)。之前我由于只设置了View中的这些变量,导致View怎么都不响应IBAction和delegate,我在代码中设置的动态改变Constraint也不起作用。为什么会这样后面的代码会做说明。

通过xib自定义view_第5张图片
4.0

5、在.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等变量作用在了不同的对象时,根本不会响应事件。

你可能感兴趣的:(通过xib自定义view)