Ios 基于页面的界面使用多个相同的ViewController

Ios 基于页面的界面使用多个相同的ViewController,ios,objective-c,watchkit,Ios,Objective C,Watchkit,我想在WatchKit中创建一个基于页面的界面 必须创建多个接口控制器并将其链接以创建基于页面的接口的状态 假设我有几个对象,每个对象我都想在手表上显示信息。然后我想使用基于页面的导航来滑动到下一个项目。所有项目使用相同的接口控制器,只是数据不同 有什么方法可以做到这一点吗?假设您已为每个页面关联了相同的InterfaceController,要向每个页面传递不同的数据,请执行以下步骤: 创建一个初始视图控制器,其作用类似于飞溅 应用程序的屏幕 在初始视图控制器的“willActivate”中,

我想在WatchKit中创建一个基于页面的界面

必须创建多个接口控制器并将其链接以创建基于页面的接口的状态

假设我有几个对象,每个对象我都想在手表上显示信息。然后我想使用基于页面的导航来滑动到下一个项目。所有项目使用相同的接口控制器,只是数据不同


有什么方法可以做到这一点吗?

假设您已为每个页面关联了相同的InterfaceController,要向每个页面传递不同的数据,请执行以下步骤:

  • 创建一个初始视图控制器,其作用类似于飞溅 应用程序的屏幕
  • 在初始视图控制器的“willActivate”中,创建一个 页面和包含需要传递的数据的上下文数组 到每个页面(InterfaceView控制器)
  • 调用WKInterfaceController.ReloadRootControllers,使用名称(第页、, 上下文:页面上下文)
  • 在您的通用界面控制器的“awakeWithContext”中 打开页面,读取上下文并初始化属性/数据
  • 第3点基本上确保了页面的显示就像直接启动一样。另一个选项是使用self.presentControllerWithNames,但会在左上角显示一个“取消”按钮

    示例代码: 屏幕内接口控制器

    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。您可以将多个相同的页面标识符添加到页面数组中。谢谢