WatchKit视图转换控制小结

移动开发 iOS
对于WatchKit App,是可以在Storyboard里建立多个InterfaceController并像在iOS应用一样直观的画出视图转换连接的,当然我们也可以通过视图控制器代码实现相应视图切换与跳转。

[[134793]]

对于WatchKit App,是可以在Storyboard里建立多个InterfaceController并像在iOS应用一样直观的画出视图转换连接的,当然我们也可以通过视图控制器代码实现相应视图切换与跳转。

简单来说视图转换连接有三种形式:

1.Push/Pop - 提供Hierarchical形态下基于栈(Stack)的视图控制,Hierarchical意为分级视图架构,效果类似iOS应用里的Navigation界面,主要用于导航类的视图转换。首先必须有一个根视图控制器,通过触发Storyboard里拖拽生成pushSegue或用pushControllerWithNames:代码将下一级视图压入(Push)堆栈并弹出时,会在标题栏前加上<左箭头,点击会返回上一级视图,也可以执行popController()代码,而直接返回根视图可以用popToRootController()。

2.Present - 与Push的方式比较类似,会跳转到一个Modal(模态)视图,区别是当前视图的控制器会被释放并执行didDeactivate方法,但我们仍然可以在模态视图里点标题栏或者在视图控制器代码调用dismissController()方法以重新激活上一个视图。

3.Next page - 分页视图模式,多个视图的横向并列排列,左右扫会切换,下方有小圆点进行标识。现在很多iOS应用启动时都有这种分页导航用于操作方法或新功能的提示。Storyboard里按住control从视图A拖到视图B选择next page可以建立此关系。

具体可以看下“WatchKit编程指南:WatchKit Apps--界面导航”这篇文章:

下面重点总结一些常见问题与解决方法:

1.Q:主控制器为分页视图时,无法push分级的视图栈;主控制器为分级视图时,无法push分页视图。

A:Page-based与Stack模式是互斥的,因此必须使用模态方式进行切换。主控制器为分页视图时,要正确弹出一个分级视图栈可以用presentControllerWithName:方法,而主控制器为分级视图时,要正确弹出单页视图,用

  1. presentControllerWithName:conext: 

方法,而弹出多个页组成的分页视图,需要改为用

  1. presentControllerWithNames:contexts: 

方法。

2.Q:怎么在视图间传递参数?

A: 利用context参数封装参数对象,若在push模式下需要传递视图控制器delegate,可参考本人之前翻译的那篇“WatchKit的代理与上下文”文章。

3. Q: 定义了ForceTouch时的上下文菜单,结果切换视图时再激活上下文菜单并点击时报错说视图指针丢失。

A: 因为你代码里是在awakeWithContext:里定义的上下文菜单,然后用模态方式弹出,这样切换视图后原视图被销毁就无法正确调用了菜单内容代码。解决方法是:I.用push方式切换视图,这样主视图存于视图栈并不会销毁对象;II.依旧用模态方式切换视图,但把上下文菜单定义代码放到willActivate()函数里,这样菜单定义会重新加载不至于失效。

责任编辑:chenqingxiang 来源: CocoaChina
相关推荐

2015-01-21 16:35:49

Apple WatchWatchKit

2014-11-20 15:44:40

Apple Watch

2015-10-21 13:57:09

WatchKit 要点开发

2014-11-20 16:02:22

WatchKit

2015-08-13 10:15:02

WatchKitHealthKitApplePay

2015-07-20 09:16:42

iOSWatchKit开发

2011-07-07 16:14:37

Cocoa MVC 模型

2015-04-14 09:33:17

WatchKitAPP

2011-08-01 10:13:46

Xcode 视图 动画

2015-06-30 10:48:41

iOSAPPwarchkit

2010-06-18 12:38:38

UML状态机视图

2015-03-24 19:48:24

2011-08-09 16:25:16

Cocos2d视图坐标

2019-07-30 08:42:54

网络访问控制网络地址转换网络

2011-09-01 12:42:09

SQL Server创建加密视图控制视图页面的访问权限

2011-09-19 14:49:26

Vista控制面板

2011-08-08 10:46:15

ASP.NET MVC

2011-07-12 09:29:10

主域控制器备份域控制器

2011-06-22 13:07:37

MVC

2011-09-01 12:53:02

SQL Server控制视图页面的访问权限
点赞
收藏

51CTO技术栈公众号