使用WatchKit(Watch)的基于页面的界面中的页码?

时间:2014-12-20 11:03:04

标签: xcode swift interface-builder watchkit apple-watch

我使用Page-Based Interface创建了一个WatchKit应用。

有3页,每一页都连接到我的 InterfaceController.swift 类(扩展 WKInterfaceController )。

我的问题:在InterfaceController.swift里面,如何检测当前视图的页码?

2 个答案:

答案 0 :(得分:2)

如果您使用

func presentControllerWithNames(_ names: [AnyObject],
                   contexts contexts: [AnyObject]?)

您只需要在上下文中传递页面的编号,以便您可以存储它,并在以后检索它。这是非故事板方式。

如果你使用故事板,它是一样的,你只需要使用其他方法

func contextsForSegueWithIdentifier(_:inTable:rowIndex:)

并在每个控制器的上下文中传递您的页面索引

答案 1 :(得分:0)

可以通过这种方式实现,

使用适当的上下文值

在pageNavigation中显示InterfaceController
[self presentControllerWithNames:@[@"TestInterfaceController",@"TestInterfaceController",@"TestInterfaceController"] contexts:@[@"Page 1",@"Page 2",@"Page 3"]];

然后创建一个NSString属性来跟踪页面和标签以显示它,

@property (nonatomic, strong) NSString *currentContext;
@property (weak, nonatomic) IBOutlet WKInterfaceLabel *pageLabel;

在awakeWithContext中将其分配给NSString属性

- (void)awakeWithContext:(id)context {
    [super awakeWithContext:context];

    NSLog(@"%@",context);
    self.currentContext = context;
}

在willActive上显示,

- (void)willActivate {
    // This method is called when watch view controller is about to be visible to user
    [super willActivate];

    NSLog(@"%@ willActivate",self.currentContext);
    [self.pageLabel setText:self.currentContext];
}

您还可以检测页面何时取消激活,

- (void)didDeactivate {
    // This method is called when watch view controller is no longer visible
    [super didDeactivate];
    NSLog(@"%@ didDeactivate",self.currentContext);
}

修改: 如果使用Storyboard Segue配置页面导航,则在Source IntefaceController中重写此方法,从中创建模型segue到目标控制器以提供上下文,

- (NSArray *)contextsForSegueWithIdentifier:(NSString *)segueIdentifier {
    NSArray *contexts = nil;
    if ([segueIdentifier isEqualToString:@"MyPageNavigation"]) {
        contexts = @[@"Page 1",@"Page 2",@"Page 3"];
    }

    return contexts;
}