我想在WatchKit中创建一个基于页面的界面。
docs表示必须创建多个接口控制器并链接它们以创建基于页面的界面。
想象一下,我有一些对象,对于每个对象,我想在Watch上显示信息。然后我想使用基于页面的导航来滑动到下一个项目。所有项目都使用相同的接口控制器,只是使用不同的数据。
有什么方法可以实现这个目标吗?
答案 0 :(得分:4)
假设您已为每个页面关联相同的InterfaceController,要将不同的数据传递到每个页面,请按照下述步骤操作:
点号。 3基本上确保您的页面显示为直接启动。其他选项是使用self.presentControllerWithNames,但这将显示"取消"左上角的按钮。
示例代码: 在SplashScreen接口控制器中
override func willActivate() {
super.willActivate()
let pages = ["page1","page2","page3","page4"]
let pageContexts = [["data1":0,"data2":0],["data1":38,"data2":1],["data1":49,"data2":1],["data1":74,"data2":2]]
WKInterfaceController.reloadRootControllersWithNames(pages, contexts: pageContexts)
}
在页面界面控制器中
override func awakeWithContext(context: AnyObject?) {
super.awakeWithContext(context)
if let contextDict:Dictionary = context as Dictionary<String,AnyObject>!
{
data1 = contextDict["data1"] as Int
data2 = contextDict["data2"] as NSTimeInterval
}
}
答案 1 :(得分:0)
如果你没有定义下面的静态,那么在willActivate中放置reloadRootControllersWithNames会导致无限循环。
static BOOL first = YES;
- (void)willActivate {
// This method is called when watch view controller is about to be visible to user
[super willActivate];
if (first) {
[WKInterfaceController reloadRootControllersWithNames:[NSArray arrayWithObjects:@"SinglePageICIdentifier",@"SinglePageICIdentifier", nil] contexts:[NSArray arrayWithObjects:@"First",@"Second", nil]];
first = NO;
}
}