我使用Page-Based Interface创建了一个WatchKit应用。
有3页,每一页都连接到我的 InterfaceController.swift 类(扩展 WKInterfaceController )。
我的问题:在InterfaceController.swift里面,如何检测当前视图的页码?
答案 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;
}