Номер на страница в базиран на страници интерфейс с WatchKit (Watch)?

Създадох приложение WatchKit с Интерфейс, базиран на страници.

Има 3 страници и всяка е свързана с моя клас InterfaceController.swift (който разширява WKInterfaceController).

Моят въпрос: вътре в InterfaceController.swift как мога да открия номера на страницата на текущия изглед?


person Luca Angeletti    schedule 20.12.2014    source източник


Отговори (2)


Ако използвате

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

Просто трябва да предадете номера на страницата в контекста, за да можете да я съхраните и да я извлечете по-късно. Това е начинът без сценария.

Ако използвате сториборд, това е същото, просто трябва да използвате другия метод

func contextsForSegueWithIdentifier(_:inTable:rowIndex:)

И предайте индекса на вашата страница в контекста на всеки контролер

person Mehdi.Sqalli    schedule 20.12.2014
comment
Благодаря Ви за отговора. Използвам Storyboard и направих и замених contextsForSegueWithIdentifier(segueIdentifier: String) -› [AnyObject]? и contextForSegueWithIdentifier(segueIdentifier: String, inTable таблица: WKInterfaceTable, rowIndex: Int) -› AnyObject? в моя InterfaceController.swift. Но тези методи не се извикват, когато променя страницата в симулатора. - person Luca Angeletti; 22.12.2014
comment
Трябва да направите модален Segue. PageController трябва да бъде модален. Ти ли направи това ? - person Mehdi.Sqalli; 22.12.2014
comment
Да, направих го чрез Interface Builder. - person Luca Angeletti; 12.01.2015

Може да се постигне по този начин,

Представете InterfaceController в pageNavigation с подходящи контекстни стойности,

[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 от мястото, където сте създали преход на модел към дестинационен контролер, за да предоставите контексти,

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

    return contexts;
}
person Dhaval Panchal    schedule 22.05.2015
comment
Благодаря ти. Последните 4 кодови блока влизат в класа InterfaceController. Но къде трябва да поставя инструкцията в първия ви блок код? - person Luca Angeletti; 22.05.2015
comment
Трябва да поставите това в контролера Source InterfaceController, откъдето представяте дестинацията си TestInterfaceController. Може да бъде всяко действие на бутон в зависимост от вашето внедряване. - person Dhaval Panchal; 22.05.2015
comment
Моля, обърнете внимание, че потребителският интерфейс се управлява изцяло чрез базирана на страници Storyboard. Има 3 InterfaceController(s) и те са свързани чрез връзка на следващата страница. Не зареждам следващия InterfaceController чрез код. - person Luca Angeletti; 22.05.2015