美文网首页
通过xib自定义view

通过xib自定义view

作者: 牵着蜗牛散步Zz | 来源:发表于2017-03-25 22:48 被阅读0次

    步骤:

    1、先新建自定义view文件

    1.0

    2、新建view文件

    2.0

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

    3.0 3.1

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

    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

          本文链接:https://www.haomeiwen.com/subject/mehhottx.html