iOS 10可视化编程之XIB和Storyboard的类关联及对象创建(4)

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加个关注。我会持续更新其他的内容。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容