Ho un'app senza storyboard, tutta la creazione dell'interfaccia utente è realizzata in codice e ho ottenuto uno splitView
che lo renderei utilizzabile su iPhone, perché come l'app è stata progettata inizialmente solo per iPad, quindi che quando selezioni una riga nell'elenco nella vista Master non fa nulla su iPhone ma funziona perfettamente su iPad.Crea ed esegui sequenze senza storyboard
Quindi la mia domanda è possibile creare ed eseguire il seguito che consente di mostrare la vista di dettaglio sul metodo didSelectRowAtIndexPath
?
Ecco quello che ho fatto finora:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let segue = UIStoryboardSegue(identifier: "test", source: self, destination: detailViewController!)
performSegueWithIdentifier("test", sender: self)
}
ma durante l'esecuzione e selezionando una riga l'applicazione è stata blocca dicendogli bisogno di un performhandler così ho aggiunto questo:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let segue = UIStoryboardSegue(identifier: "test", source: self, destination: detailViewController!, performHandler: {() -> Void in
let object = self.fetchedResultsController.objectAtIndexPath(indexPath)
let controller = self.detailViewController!
controller.detailItem = object
controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem()
controller.navigationItem.leftItemsSupplementBackButton = true
})
performSegueWithIdentifier("test", sender: self)
}
e ora quando si seleziona una riga xcode si dice che non vi è alcun seguito con tale identificativo "test".
ho anche provato a chiamarla con segue.perform()
e aggiungere il contenuto performHandler nella prepareForSegueMethod:
if segue.identifier == "test" {
if let indexPath = self.tableView.indexPathForSelectedRow {
let object = self.fetchedResultsController.objectAtIndexPath(indexPath)
let controller = (segue.destinationViewController as! UINavigationController).topViewController as! DetailViewController
controller.detailItem = object
controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem()
controller.navigationItem.leftItemsSupplementBackButton = true
}
}
e lo fa proprio niente, non va in crash, basta evidenziare la riga ho selezionato e questo è tutto
Potete aiutarmi ragazzi?
EDIT: Come ha detto Oleg Gordiichuk, non è possibile fare ciò che voglio fare a meno di storyboard, così, grazie per il suo aiuto :)
Grazie per la risposta, ho provato con pushViewController ed a cui subentra la vista e stava causando problemi su iPhone 6 Plus e 6S Plus in modalità orizzontale. La tua soluzione non funziona per me, perché non ho storyboard così self.storyboard restituisce sempre nil, ma ho i riferimenti dei due controller in splitView nel file AppDelegate e ancora non funziona " per presentare modally un controller attivo " – EddyW
Utilizzare navigationcontroller per presentare controller di visualizzazione su di esso. –
provato con: let navC = UINavigationController (rootViewController: shared.mediaListController) self.presentViewController (navC, animato: true, completamento: nil) E funziona ma non è quello che sto cercando ^^ 'voglio solo la vista di dettaglio che mostra come nell'esempio xcode della vista master/dettagli su iPhone – EddyW