xib文件中创建多个视图

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/longshihua/article/details/50413413

xib文件的创建和使用

1)多个view的创建和使用(方法一)

1.创建一个xib文件,然后设置这个xib文件中的属性,设置如下:

a:file’s owner的类不需要设置,默认为nsobject类
b:在xib中添加四个view,然后分别设置view的属性如下:

   设置Size为Freeform,即可自动调整视图大小.
   Status Bar 选择为 None.去除状态栏.
   设置 view 的背景颜色.

这里写图片描述
c:改变view的颜色。

整体样式去下图:

这里写图片描述

需要使用view的类文件中添加下面的代码:

-(void)test1{
 NSArray *array=[[NSBundle mainBundle]loadNibNamed:@"TestXib" owner:nil options:nil];
    NSLog(@"%d",array.count);//打印结果:使用xib自定义多个 view  4 .所以在 xib文件中我们添加了多少的视图,就可以获取多少视图.对应着我们添加的个数,获取视图的顺序就是添加的顺序.

    [array enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {

        UIView *view=array[idx];

        CGRect frame=view.frame;
        frame.origin.y=frame.size.height*idx;
        view.frame=frame;

        [self.view addSubview:view];
    }];
    }

/*
   注意:如果想对 view 上的子控件进行操作,除了自定义一个子视图进行关联控件对象外.也可以给 view 上每一个子控件添加tag值,然后通过tag值获取对应的控件,进行相应的操作.

*/

通过上述代码所得到的效果图如下:

这里写图片描述

2)多个view的创建和使用(方法二),将view直接与xib进行关联.

类中创建的redView和greenView与xib中的创建的redView和greenView和进行关联.(这里就只创建2个View进行学习).

a:首先在ViewController类中编写相应的代码如下:

@interface ViewController ()

@property(nonatomic,strong) IBOutlet UIView *redView;
@property(nonatomic,strong) IBOutlet UIView *greenView;

@end

b:创建一个xib文件,把xib文件中的file owner的类改成ViewController:

这里写图片描述

c:在这个xib中创建一个redView和greenView(与前面方法相同,这里添加了两个按钮,后续使用)

这里写图片描述

d:打开file owner中的关联属性栏,你会发现这边有一个redView和greenView(这个就是我们刚刚ViewController在创建的属性),我们将redView和greenView和xib中的创建的view关联起来.

这里写图片描述
这里写图片描述

e:在ViewController类中添加代码:

/**
 *   ViewController类中创建redView,greenView,并于xib进行关联.
 */
-(void)test2{

    [[NSBundle mainBundle] loadNibNamed:@"TestTwo" owner:self options:nil];

    [self.view addSubview:self.redView];

    CGRect frame=self.greenView.frame;
    frame.origin.y+=60;
    self.greenView.frame=frame;
    [self.view addSubview:self.greenView];

/*
 这里有些知识点理解一下:
 1.将file owner的类变成ViewController这个类,就相当于说明了这个xib文件是属于ViewController类。
 2.我们将redView和greenView与xib中创建的新的redView和greenView关联起来就相当于将他们属性与属性描述链接起来,在代码运行中会自动对redView和greenView进行相应要求的创建。
 3.要实现之前的效果,我们需要使用[[NSBundlemainBundle] loadNibNamed:@"testXib"owner:self options:nil];
 方法,并将owner改为self。因为这个xib现在是属于viewControlelr这个类的。
 */
}

效果图如下:

这里写图片描述

3)自定义UIView并与xib中的view进行关联,对子控件进行操作.

a:.创建一个UIView类型的子类view.并将 xib中redView和greenView的类名改为创建的子类名.

这里写图片描述

b:将这个xib设置的redView和greenView中的button和与子 view 进行连线.

这里写图片描述

c:运行程序,按钮点击是有效果的,但是viewControlelr中的代码如下,有没有什么想法?

这里写图片描述

如果想使用自定义 view 中的属性,那么代码就肯定要改为如下(最好是修改成自定义的 view,不然自定义就无意义了.):

这里写图片描述

这里写图片描述

在 test2中添加部分代码如下,设置按钮的响应属性:

 -(void)test2{

    [[NSBundle mainBundle] loadNibNamed:@"TestTwo" owner:self options:nil];
    [self.redView.redButton setBackgroundColor:[UIColor blackColor]];
    [self.redView.redButton setTitle:@"红色视图" forState:UIControlStateNormal];
    [self.view addSubview:self.redView];

    CGRect frame=self.greenView.frame;
    frame.origin.y+=60;
    self.greenView.frame=frame;
    [self.greenView.greenButon setBackgroundColor:[UIColor grayColor]];
    [self.greenView.greenButon setTitle:@"绿色视图" forState:UIControlStateNormal];
    [self.view addSubview:self.greenView];
/*
   这里要注意了:视图对应的控件不要使用错了,因为两个视图对应着同一个自定义的 view, 所以只要是自定义视图的对象.两个视图中每一个关联之后的属性对象,都是可以使用的.当然也可以另外定义一个UIView的子视图进行对应的操作.
*/
}

效果图如下:

这里写图片描述

推荐:
http://www.ifun.cc/blog/2014/02/22/ioskai-fa-zhi-xibji-qiao-jie-shao/

展开阅读全文

没有更多推荐了,返回首页