美文网首页iOSiOS 进阶
iOS 10可视化编程之XIB和Storyboard的类关联及对

iOS 10可视化编程之XIB和Storyboard的类关联及对

作者: 虎哥最帅 | 来源:发表于2017-02-04 11:09 被阅读1143次

Storyboard的类关联和对象创建

storyboard的类管理是非常简单的。我们举一个常用的例子。管理一个viewcontroller。
新建类,如图29-1所示:

图29-1

然后在storyboard中,拖入viewcontroller进行关联。如图29-2所示:

图29-2

这样我们的TestViewController就和我们的storyboard的可视化文件进行关联起来了。

storyboard设置根视图控制器

程序启动需要一个根视图控制器,在storyboard中设置根视图控制器是非常简单的。如图30-1所示:

图30-1

先选中viewcontroller,然后勾选In initial View Controller,然后这个控制器的左侧就会出现一个箭头指向这个视图控制器,这样设置后,系统默认加载的根视图控制器就是我们的选中的控制器了。

系统启动后加载的storyboard

我们启动程序后,系统会默认加载我们的Main.storyboard。其实我们可以更换storyboard。
新建storyboard文件,如图31-1所示:


图31-1

给我们创建的storyboard起个名字。如图31-2所示:


图31-2
然后现在系统默认加载的依然是我们的Main.storyboard,我们现在给他更改成我们创建的Test.storyboard。如图31-3所示: 图31-3

更改完后,系统默认加载的就是我们的Test.Storyboard了。现在有个问题,刚刚我们所说的根视图控制器,指的是系统加载的storyboard中第一个运行的视图控制器。然而我们刚刚指定的Test.storyboard还没有给他指定根视图控制器。那么我们需要给他添加一个viewcontroller然后给他设置成Test.storyboard的根视图控制器。如图31-4所示:

图31-4

然后这样系统启动后,根视图控制器就是我们Test.storyboard中的MyViewController。

Storyboard类的创建方式

我对可视化编程的类的创建坚持一个原则就不会有问题。就是如果是XIB就用XIB的方式创建,如果是Storyboard就用Storyboard的方式创建,不要用 [[类名 alloc] init]。如果是纯代码编程就用[[类名 alloc] init],坚持这个原则你就不会创建错误。那么Storyboard的类创建有2种方式。
方式一
在storyboard中指定根视图控制器的创建方式(ps:就是带这种箭头的方式创建)如图32-1所示当前这个类的创建。

图32-1

我们创建一个对象:
引入头文件

#import “TestViewController.h"

TestViewController *testVC = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateInitialViewController];

这里文件的名字一定要和可视化文件的名字保持一致,尽可能的去复制。如图32-2所示:

图32-2
方式二
在storyboard中不是根视图控制器的创建,如图33-1所示:我们创建一个Viewcontroller的对象 图33-1

引入头文件

#import "ViewController.h"

ViewController *hVC = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@“viewC"];

这里有一个Identifier,我们需要在可视化文件中设置。如图33-2所示:

图33-2

当然,我们也可以给根视图控制器设置Identifier,也可以第二种方式创建根视图控制器。

XIB的类关联和对象创建

XIB的类管理,大家要认清一点,那个是控制器,那个是视图。认清这一点,XIB的关联就不会有问题。
那么现在咱们举几个例子,让大家明白如何关联类。

关联viewcontroller。

创建一个类,如图34-1所示:

图34-1

勾选选项卡,系统就会给我们创建好直接关联好的可视化文件。
那么现在我们不勾选,自己来关联。如何来关联UIViewcontroller。
我们选创建一个类,然后如图34-2所示:


图34-2

然后生成一个可视化文件来进行关联。如图34-2所示:

图34-2

然后给定可视化文件的名字,这里的名字是可以随便起的,但是在开发过程中,一般会和类文件保持名字一致,方便以后的管理。如图34-3所示:

图34-3

然后进行类关联。大家认真看,左侧栏的选项卡,有2个非常重要的东西,一个叫File’s Owner 另外一个是View 如图34-4所示:

图34-4
注意:File’s Owner就是控制器, View就是视图。
一定记住File’s Owner就是控制器,这个前提,你就不会关联错文件。
我们现在去关联。我们要关联的类是一个viewcontroller。也就说,是个控制器。那么现在,我们的需要关联的类就应该选中File’s Owner。然后进行关联。如图34-5所示: 图34-5

然后,我们现在来理解这个view,这个view就是我们viewcontroller中的self.view。那我们需要把视图给我们的File’s Owner指定。如图34-6所示:

图34-6

从File’s Owner按住control往View身上拽。然后选择View。这样,viewcontroller中的view就是我们可视化xib文件中的View了。如图34-7所示:

图34-7

ViewController对象的XIB创建

#import "TestViewController.h"
TestViewController *testVC = [[TestViewController alloc] initWithNibName:@"TestViewController" bundle:nil];

这里的NibName是XIB的文件名字,如图34-8所示:

图34-8

UITableViewController的类关联

然后我们做一个类似的UITableViewController关联。
创建一个UITableViewController的类如图35-1所示:

图35-1

然后创建一个可视化文件进行关联。如图35-2所示:

图35-2

进行类关联。我们想想看,应该点击那个进行关联类,是view 还是File’s Owner?
UITableViewController也是视图控制器,所以我们一定要选择File’s Owner再进行关联。如图35-3所示:

图35-3

然后接着想,UITableViewController的view是个什么?是View 还是 Tableview?没错,就是tableview,所以我们要要把View删了。拖拽一个tableview再指定视图。如图35-4所示:
选中View删除。然后拖拽Tableview

图35-4

然后和之前一样,tableview成为File’s Owner的视图。如图35-5所示:

图35-5

然后,UITableViewController是实现了tableview的代理方法的,我们需要把tableview的代理设置下。然后大家想想我们的tableview指定代理代码是不是 tableView.dataSource = self;这样指定的,这里的self是不是就是我们TestTableViewController本身。然后我们的File’s Owner是什么?是不是视图控制器。也就是我们的self。所以,这里指定代理。选中View右键,然后拖拽到File’s Owner上。如图35-6所示:

图35-6

同理也Delegate也指定下吧。这样我们的UITableViewController的类关联就完成了。

![Uploading 22ACD3F9-A157-4D6F-AF68-8BCE58F97218_745948.png . . .]UITableViewController对象XIB的创建

#import "TestTableViewController.h"
TestTableViewController *testTVC = [[TestTableViewController alloc] initWithNibName:@"TestTableViewController" bundle:nil];

这里的NibName也是XIB文件的名字。同上。

UITableViewCell的类关联

UITableViewCell我们在开发中,用的比较多。一般都会选中勾选XIB,让系统帮我们创建,这里我看看如何进行类的关联。
创建一个UITableViewCell的类。这里不再演示,我们直接从关联开始。如图36-1所示:

图36-1

然后我们的Cell中的视图是我们的UITableViewCell,所以,我们把View可视化文件删掉,拖拽一个UITableViewCell上去。如图36-2所示:

图36-2

然后进行类关联,我们想想这里我们关联那个文件,是File’s Owner还是可视化文件TableViewCell。UITableViewCell是不是控制器。答案是否,他是个视图,所以这里关联类,我们要选择可视化文件View来进行关联,如图36-3所示:

图36-3

UITableViewCell的对象创建

UITableViewCell和其他的视图不太一样,UITableViewCell都是要靠重用机制的,这里我只提示一点。storybord中的cell我们可以通过免注册的方式。先让tableView显示一条Cell如图37-1所示:

图37-1

然后点击cell 进行类的关联,通过identifier就可以免去cell的注册。如图37-2所示:

图37-2

如果你在storyboard中没有使用cell,想通过xib的cell进行使用的话,cell需要进行注册。
代码如下:

#import “TestTableViewCell.h"
  [tableView registerNib:[UINib nibWithNibName:@"TestTableViewCell" bundle:nil] forCellReuseIdentifier:@"cell"];

NibName依然是我们xib文件代码名字。
纯代码方式的cell注册,这里不再介绍。

Storyboard的传值

在我们开发过程中,经常有一些属性传值的情况,而Storyboard是可以直接进行类的跳转的。所以会有一些传值问题。这里主要讲解一个方法。2个例子给大家讲解。
例子1
一个按钮点击进入到二级界面。这里我选择了show,如图38-1所示:

图38-1

这样点击Button就直接进入到二级页面了,可是这个时候,我们没有写代码,也就意味着,我们传值没有办法实现了,可视化编程传值,是需要通过一个方法的。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

如果你的视图控制器中不存在这个方法,大家可以把他敲出来。
我们说明下这个方法的参数。如图38-2所示:

图38-2

sender就是指的是点击那个空间点击进入二级页面的。segue指的就是那根连接的线。

segue常用的属性

segue.sourceViewController(一级界面的控制器或者上个控制器)
segue.destinationViewController(二级界面的控制器或者下个控制器)
segue.identifier(标记。用来区分是那条线。我们后面讲这个用处。)

可以根据segue.sourceViewController和segue.destinationViewController来完成传值的效果。这里不再演示。接着我们来讲解identifier的用处
例子2
有一个cell,根据某个值点金让跳转到不同的2个viewcontroller。我们这里拖拽cell就不能实现连接2条线了。拖拽cell只能连接一条线。不能完成2条线。如图38-3所示:

图38-3

同理我们再拖拽一条到另外一个VC。实现效果如图38-4所示:

图38-4

之后,我们需要在cell点击的代理方法中,让他进入到不同的线,进入到不同的VC页面。

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (YES) {
        [self performSegueWithIdentifier:@"fistVC" sender:nil];
    }else{
        [self performSegueWithIdentifier:@"secondVC" sender:nil];

    }
}

这里的performSegueWithIdentifier方法就是让我们的可视化编程进入到不同的线,我这里有2条线,给定不同的标识,这样我就可以控制cell,让他调用不同的线,进入到不同的VC界面。
那么这里的Identifier是在哪设置的呢。如图38-5所示:

图38-5

一定要先点击其中的一条线,再设置Identifier。同理,把另外一条Identifier设置成secondVC。这里的Identifier就是我们的segue.identifier。
然后在可视化编程跳转的方法中做其他的设置。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"firstVC"]) {
        NSLog(@"传值到第一个页面");
    }else{
        NSLog(@"传值到第二个页面");
    }
}

可视化编程就此结束,如果有其他疑问,大家可以在留言区留言,我会及时回复大家,如果有必要我会再补充。

如果这系列文章有帮助到你,可以点个赞or加个关注。我会持续更新其他的内容。

相关文章

网友评论

本文标题:iOS 10可视化编程之XIB和Storyboard的类关联及对

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