2014-07-16 10 views
8

Ci scusiamo per la domanda senza alcuna riga di codice. Ho bisogno di consigli su come procedere, se possibile ciò che voglio.Emulazione programmatica della selezione in UITableViewController in Swift

In lingua Swift.

Supponiamo che ci sia un'app con due controller - UITableViewController con incorporato NavigationController, come principale. Quando si seleziona una riga nella tabella, viene aperto UIViewController, che visualizza informazioni dettagliate sul valore selezionato.

È possibile fare diversamente? All'avvio dell'applicazione, emula la selezione della prima riga della tabella e visualizza immediatamente UIViewController con informazioni dettagliate sul valore selezionato. E da questo controller è possibile tornare a UITableViewController tramite lo NavigationController.

Ancora una volta mi scuso e vi ringrazio in anticipo!

risposta

36

Sì, è possibile farlo in swift.Just caricare il tableViewController come usual.You solo chiamare

In Swift

let rowToSelect:NSIndexPath = NSIndexPath(forRow: 0, inSection: 0); //slecting 0th row with 0th section 
    self.tableView.selectRowAtIndexPath(rowToSelect, animated: true, scrollPosition: UITableViewScrollPosition.None); 

La funzione selectRowAtIndexPath non si innescherà metodi delegato come didSelectRowAtIndexPath: in modo da avere per attivare manualmente questo metodo delegato

self.tableView(self.tableView, didSelectRowAtIndexPath: rowToSelect); //Manually trigger the row to select 

o se si sta spingendo ViewControllers con seg ue si deve innescare performSegueWithIdentifier

self.performSegueWithIdentifier("yourSegueIdentifier", sender: self); 

Ora si può spingere viewController in didSelectRowAtIndexpath .Per selezionare la prima riga nella prima sezione o eseguire whaterver che hai scritto in didSelectRowAtIndexpath: di tableView

Per quanto riguarda il tuo caso basta premere il viewController su Seleziona in corrispondenza dell'indice 0a con didSelectRowAtIndexPath

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!){ 

    if indexPath.row == 0 { 

     self.navigationController.pushViewController(yourViewControllerToPush, animated: YES); 
    } 
    //handle other index or whatever according to your conditions 
} 

mostrerà il controller della vista spinto e se non si vuole ani controller di visualizzazione accoppiamento passare semplicemente il metodo NO a pushViewController.

Premendo Back tasto si nuovo al vostro viewController

Nel tuo caso basta scrivere questo nella vostra viewDidAppear

if firstStart { 
    firstStart = false 
    let rowToSelect:NSIndexPath = NSIndexPath(forRow: 0, inSection: 0) 
    self.tableView.selectRowAtIndexPath(rowToSelect, animated: true, scrollPosition:UITableViewScrollPosition.None) 
    self.performSegueWithIdentifier("showForecastSelectedCity", sender: self) 
} 
+0

Nel mio viewDidAppear: '........se firstStart { firstStart = false lasciare rowToSelect: NSIndexPath = NSIndexPath (forRow: 0, inSection: 0) self.tableView.selectRowAtIndexPath (rowToSelect, animato: vero, scrollPosition: UITableViewScrollPosition.None) self.tableView (self.tableView , didSelectRowAtIndexPath: rowToSelect) } 'mia ** ** didSelectRowAtIndexPath:' esclusione func tableView (tableView: UITableView !, didDeselectRowAtIndexPath indexPath: NSIndexPath) { self.performSegueWithIdentifier ("showForecastSelectedCity", mittente: auto) } ' –

+0

errore : '[_TtC12WeatherTest229FavWeatherTableViewController tableView: didSelectRowAtIndexPath:]: selettore non riconosciuto inviato all'istanza 0x7f7fea81d880 *** Terminazione dell'app a causa dell'eccezione non rilevata 'NSI nvalidArgumentException ', motivo:' - [_ TtC12WeatherTest229FavWeatherTableViewController tableView: didSelectRowAtIndexPath:]: selettore non riconosciuto inviato Cosa c'è di sbagliato? –

+1

Poiché non si sta implementando 'didSelectRowAtIndexPath', non è necessario chiamare' self.tableView (self.tableView, didSelectRowAtIndexPath: rowToSelect) '. – codester

4

È anche possibile fare questo semplicemente accedendo al delegato tableView per forza "didSelectRowAtIndex" al fuoco

// programatically selezionare una riga di lavorare con

self.tableView.selectRowAtIndexPath(indexPath, animated: true, scrollPosition: UITableViewScrollPosition.Top) 

// selezionando Programatically fila non si attiva la funzione "didSelectRowAtIndexPath" quindi dobbiamo forzare manualmente il fuoco come sotto

self.tableView.delegate!.tableView!(tableView, didSelectRowAtIndexPath: indexPath!) 
Problemi correlati