Ios 基于页面的界面使用多个相同的ViewController
我想在WatchKit中创建一个基于页面的界面 必须创建多个接口控制器并将其链接以创建基于页面的接口的状态 假设我有几个对象,每个对象我都想在手表上显示信息。然后我想使用基于页面的导航来滑动到下一个项目。所有项目使用相同的接口控制器,只是数据不同Ios 基于页面的界面使用多个相同的ViewController,ios,objective-c,watchkit,Ios,Objective C,Watchkit,我想在WatchKit中创建一个基于页面的界面 必须创建多个接口控制器并将其链接以创建基于页面的接口的状态 假设我有几个对象,每个对象我都想在手表上显示信息。然后我想使用基于页面的导航来滑动到下一个项目。所有项目使用相同的接口控制器,只是数据不同 有什么方法可以做到这一点吗?假设您已为每个页面关联了相同的InterfaceController,要向每个页面传递不同的数据,请执行以下步骤: 创建一个初始视图控制器,其作用类似于飞溅 应用程序的屏幕 在初始视图控制器的“willActivate”中,
有什么方法可以做到这一点吗?假设您已为每个页面关联了相同的InterfaceController,要向每个页面传递不同的数据,请执行以下步骤:
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
}
}
页内接口控制器
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
}
}
覆盖func awakeWithContext(上下文:AnyObject?){
super.awakeWithContext(context)
如果让contextDict:Dictionary=上下文作为字典!
{
data1=contextDict[“data1”]作为Int
data2=contextDict[“data2”]作为NSTimeInterval
}
}
如果不定义如下所示的静态,则将名为的ReloadRootControllers放入willActivate会导致无限循环
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;
}
}
听起来不错,我明天试试。我仍然不知道的是,如果项目/页面的数量发生变化,例如,它可以是1、2或5。然后我可以创建5个相互链接的场景,但是当实际页面数量只有2个时,我怎么能跳过3个呢?我想,在这种情况下,你可以使用“self.becomeCurrentPage()”。太棒了。实际上,您不需要在故事板中制作多个相同的InterfaceController。您可以将多个相同的页面标识符添加到页面数组中。谢谢