Questa è la mia prima applicazione per iOS.Avvertenza: Tentativo di presentare * su * che è già presente (null)
Così ho un UIVIewController
con un UITableView
dove ho integrato un UISearchBar
e un UISearchController
al fine di filtrare TableCells per visualizzare
override func viewDidLoad() {
menuBar.delegate = self
table.dataSource = self
table.delegate = self
let nib = UINib(nibName: "ItemCellTableViewCell", bundle: nil)
table.registerNib(nib, forCellReuseIdentifier: "Cell")
let searchButton = UIBarButtonItem(barButtonSystemItem: .Search, target: self, action: "search:")
menuBar.topItem?.leftBarButtonItem = searchButton
self.resultSearchController = ({
let controller = UISearchController(searchResultsController: nil)
controller.searchResultsUpdater = self
controller.dimsBackgroundDuringPresentation = false
return controller
})()
self.table.reloadData()
}
sto usando anche un segue modale al fine di aprire il ViewController
cui elemento Mostrerò i dettagli dell'elemento.
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
self.index = indexPath.row
self.performSegueWithIdentifier("ItemDetailFromHome", sender: self)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier == "ItemDetailFromHome") {
let settingsVC = segue.destinationViewController as! ItemDetailViewController
settingsVC.parent = self
if self.isSearching == true && self.searchText != nil && self.searchText != "" {
settingsVC.item = self.filteredItems[self.index!]
} else {
settingsVC.item = self.items[self.index!]
}
}
}
Questo funziona bene fino a quando cerco di visualizzare il ItemDetailViewController
per un elemento filtrato (attraverso il UISearchController
).
ho il seguente messaggio:
Warning: Attempt to present <ItemDetailViewController: *> on <HomeViewController: *> which is already presenting (null)
Ad ogni volta che mi accingo alla funzione ItemDetailViewController.viewDidLoad()
ma dopo che, quando la ricerca viene attivato ho l'errore precedente.
Qualche idea? Ho provato a utilizzare il seguente invio asincrono ma senza successo
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
self.index = indexPath.row
dispatch_async(dispatch_get_main_queue(), {() -> Void in
self.performSegueWithIdentifier("ItemDetailFromHome", sender: self)
})
}
se si sta impostando ItemDetailFromHome dal controller Tableview non c'è bisogno di chiamare self.performSegueWithIdentifier (" ItemDetailFromHome ", sender: self) in ha selezionato la riga al percorso dell'indice – Johnykutty
Infatti," ItemDetailViewController' sarà una vista utilizzata da diversi follow/viewController (mutualizzati). – Splendf
Grande, e come posso farlo? in cellForRowAtIndexPath? Ho appena visto esempi con performSegue – Splendf