本文要讲述iWatch常用 的分页导航、水平模式、弹出模式、视图间传值,如下将按照其展示讲述。
一、分页导航
具体用法:
在Interface.storyboard中,拖五个控制器,然后在每一控制器中放一个image并加载不同图片。分页导航关键的操作如下图 1.png,按住A控制器箭头处,然后按住control 键向控制器B 拉线,并出现箭头的所指的弹框,选中next page。其他控制器也是参照上面操作。
1.png
最终的分页导航的效果如下图(分页导航.gif);
分页导航.gif
新需求:
现在这边产品经理提出新的要求,app启动的时候,指定要看到第二个控制器。
做法如下,新建一个OLIInterfaceController继承自WKInterfaceController,然后让第二个控制Storyboard的class是OLIInterfaceController,最后写如下代码,大功告成。
- (void)awakeWithContext:(id)context {
[super awakeWithContext:context];
//通过此行代码,可以让当前页为第一页。
[self becomeCurrentPage];
}
二、控制器模态模式
0.效果图如下(水平模式.gif);
控制器模态模式.gif1.Interface.storyboard设置
在2.png图中,A处是设置identifier的,纯代码会用到。
2.png
2.纯代码
第一个控制器,button点击事件。
#pragma mark - push到第二个控制器
- (IBAction)pushSecondVC
{
//如果不是连线,在storyboard 设置控制器的identifier
[self presentControllerWithName:@"secondController" context:nil];
}
第二个控制器,button点击事件。
#pragma mark - 模态 到第三个控制器
- (IBAction)pushLastVC {
//如果不是连线,在storyboard 设置控制器的identifier
[self presentControllerWithName:@"thirdController" context:nil];
}
#pragma mark - 返回到第一个控制器
- (IBAction)backToRootVC {
//返回到根控制器
[self dismissController];
}
第三个控制器,button 点击事件
#pragma mark - 返回到第二个控制器
- (IBAction)dismiss
{
//返回第一个控制器
[self dismissController];
}
三、控制器水平模式
0.效果图如下(弹出模式.gif);
控制器水平模式.gif1.Interface.storyboard设置,请参照 控制器模态模式。
2.纯代码
第一个控制器,button点击事件。
#pragma mark - push到第二个控制器
- (IBAction)pushSecondVC
{
//如果不是连线,在storyboard 设置控制器的identifier,用此方法进行push
[self pushControllerWithName:@"secondController" context:nil];
}
第二个控制器,button点击事件。
#pragma mark - push 到第三个控制器
- (IBAction)pushLastVC {
//如果不是连线,在storyboard 设置控制器的identifier,用此方法进行push
[self pushControllerWithName:@"thirdController" context:nil];
}
#pragma mark - 返回到第一个控制器
- (IBAction)backToRootVC {
//返回到根控制器
[self popToRootController];
}
第三个控制器,button 点击事件
#pragma mark - 返回到第二个控制器
- (IBAction)dismiss
{
//返回第一个控制器
[self popController];
}
四、水平模式和弹出模式注意点
1.如果多个控制器的跳转都是用Push,不要用model,这样子会出问题的,亲身体验。
2.如果多个控制器的跳转是modal,不能用push,同样也会出问题,会把iWatch app 搞晕。
五、视图间传值
1.Interface.storyboard设置,如下图
3.png2.纯代码
第一个控制器,button点击事件,传递数据给第二个控制器。
- (IBAction)pushSecondVC
{
//自定义字典
NSDictionary *dict = @{@"key":@"value"};
//push controller 顺别传值
[self pushControllerWithName:@"GDInterfaceController" context:dict];
}
第二个控制器,接受第一个控制器传来的数据。
//mark: 从interfaceController 接受传来的值,放在context
- (void)awakeWithContext:(id)context
{
[super awakeWithContext:context];
//打印结果
NSLog(@"%@",context);
/*
打印结果如下:
2017-03-08 17:12:19.981 控制器的传值 WatchKit Extension[31611:1168877] {
key = value;
}*/
}
over!! 本人小白,有足的东西,请帮忙指正,感谢!!
May maker help us all!!
网友评论