2015-01-27 8 views
7

Sto lavorando su Apple Watch. Sono tentato di passare i dati dell'array da uno InterfaceController a un altro utilizzando PageBasedNavigation in watch-kit. Quindi qualcuno mi può suggerire come passare la matrice mentre si fa scorrere il modulo a sinistra in watch-kit a livello di programmazione?Passare dati di array da un'interfaccia all'altra in watchkit utilizzando la navigazione basata sulla pagina?

per la creazione di un'interfaccia basato sulla pagina seguo le seguenti operazioni:

  1. Nel mio storyboard, aggiungere controller di interfaccia per ciascuna delle pagine nell'interfaccia.

  2. Fare clic tenendo premuto il tasto Ctrl sull'unità di controllo dell'interfaccia principale e trascinare su un altro controller di interfaccia.

  3. Il secondo controller di interfaccia dovrebbe evidenziare, indicando che è possibile un passaggio.

  4. Rilasciare il pulsante del mouse.

  5. Selezionare la pagina successiva dal pannello delle relazioni successive.

Utilizzando la stessa tecnica, creare follower da ciascun controller di interfaccia a quello successivo.

risposta

5

Il metodo WatchKit per il passaggio di oggetti a un page- basato su WKInterfaceController è diverso rispetto a iOS. Mentre vedrai una relazione successiva sullo Storyboard, quando fai clic su di esso non c'è alcuna opzione per nominare questo seguito (che è il primo passo per utilizzare il metodo prepareForSegue: in iOS).

Piuttosto, quello che fai è passare un array che contiene oggetti "contestuali", uno dei quali verrà fornito a ciascun WKViewController che gestisce una pagina. In Objective-C:

+ (void)reloadRootControllersWithNames:(NSArray *)names 
          contexts:(NSArray *)contexts 

In Swift:

class func reloadRootControllersWithNames(_ names: [AnyObject]!, 
          contexts contexts: [AnyObject]!) 

Se si dispone di un oggetto che si desidera passare da uno all'altro, si imposta l'oggetto come il contesto per ogni pagina:

NSArray * namesArray = @[@"Page 1", @"Page 2", @"Page 3"]; 
NSArray * contextsArray = @[myObject, myObject, myObject]; 
[self reloadRootControllersWithNames:namesArray contexts:contextsArray]; 

Abbastanza contro-intuitivamente dal nome del metodo, mentre questo metodo è chiamato reloadRootControllersWithNames:, il WatchKit documentation on Managing Page-Based Navigation indica che questo stesso metodo dovrebbe essere utilizzato per seminare questi valori a Lau nch time, così come ogni volta che vuoi ricaricare questi dati in fase di runtime.

1

Non sto più lavorando con Object-C ma penso che l'oggetto C sia simile. sto lavorando con rapido ora. Con Swift, è possibile creare un nuovo file singleTon.swift e mettere questo all'interno di che:

// 
// singleTon.swift 
// testSingleTon 
// 
// Created by Standard on 1/14/15. 
// Copyright (c) 2015 Standard. All rights reserved. 
// 

import UIKit 

class singleTon: NSObject { 
    class var sharedInstance : singleTon { 
     struct Example { 
      static let instance = singleTon() 
     } 
     return Example.instance 
    } 

    var number = 0 
    var array = [] 

} 

Dopo di che è possibile condividere i dati di tutta l'interfaccia dell'applicazione. Per esempio è possibile modificare i dati all'interno di primo InterfaceController come questo:

override func willActivate() { 
     // This method is called when watch view controller is about to be visible to user 
     super.willActivate() 
     NSLog("%@ will activate", self) 



     singleTon.sharedInstance.array = ["new"] 


    } 

ed è possibile modificare o prendere lo shareInstance in SecondInterface come questo:

override func willActivate() { 
     // This method is called when watch view controller is about to be visible to user 
     super.willActivate() 
     NSLog("%@ will activate", self) 


     println("share data: \(singleTon.sharedInstance.array)") // It's will show up the ["new"] here 


    } 
0

NSUserDefaults può essere utilizzato tra i controller di interfaccia.