Ho aggiunto alcune funzionalità di prova 3D Touch
a UITableViewController
su iPhone 6s. In generale funziona bene, ma sono stato in grado di osservare alcuni 2 problemi, e non sono sicuro di cosa sta succedendo e come risolverlo in un modo normale.3D Touch e UITableViewCell
1) La mia cella è selezionabile, quindi l'utente può premere su di essa o utilizzare "3D Touch". Il problema è che quando uso "Pop" e "Peek" per UITableViewCell
diventa selezionato e non riesco a deselezionare in modo normale usando i metodi setSelected:
o setHighlighted:
. Ho provato a deselezionarlo in diversi punti anche nel previewingContext:commitViewController
nel completamento presentViewController
. Non fanno nulla e le celle rimangono nello stato selezionato. Ho recuperato la cella selezionata chiamando lo reviewingContext.sourceView
e un altro codice temporaneo che mi ha fornito la cella selezionata, ma questi metodi non hanno funzionato.
- Quindi la domanda c'è un modo normale per deselezionare (o meglio non per selezionare) la cella quando l'utente applica premere "Pop" su di esso?
2) Ho anche notato che a volte, quando posso cancellare gesto "Pop" e portare cellule allo stato iniziale (quando previewingContext:viewControllerForLocation
metodo è stato nemmeno chiamato) la mia interfaccia utente si blocca proprio e non risponde ai tocchi a tutti . Ho bisogno di uccidere per farlo funzionare. Sembra molto strano, ho controllato questo Tutorial. Funziona alla grande, senza problemi menzionati, ma registrano delegato non sulla cella, ma su UITableView
quindi il gesto "Pop" evidenzia l'intera tableView, ma non la cella.
- Qualche idea e cosa può essere sbagliato qui?
Ecco come ho implementato tocco 3D nel mio test UITableViewController
conforme alle UIViewControllerPreviewingDelegate
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCellWithIdentifier("SomeDemoID",
forIndexPath: indexPath) as! UITableViewCell
// Some cell configuration
if #available(iOS 9.0, *) {
if traitCollection.forceTouchCapability == .Available {
self.registerForPreviewingWithDelegate(self, sourceView: cell)
}
} else { // Fallback on earlier versions}
return cell;
}
// MARK: - UIViewControllerPreviewingDelegate
func previewingContext(previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController?
{
// Just Test View Controller
return UIViewController(nibName: nil, bundle: nil)
}
func previewingContext(previewingContext: UIViewControllerPreviewing, commitViewController viewControllerToCommit: UIViewController)
{
self.presentViewController(viewControllerToCommit, animated: true, completion: nil)
}
Grazie in anticipo!