2016-08-09 69 views
0

Ich habe versucht, eine Anwendung zu erstellen, bei der beim Laden der Ansicht der Fokus automatisch in die erste Zelle von UITableview geht.Automatisch den Fokus auf die erste Zelle von UITableView setzen, wenn die Ansicht geladen wird

Ich habe versucht mit dem UIFocusGuide und dann in prefferedFocusView() Methode zurück die TableView aber das hat nicht funktioniert.

schrieb ich dann diesen Code

var viewToFocus: UIView? = nil { 
    didSet { 
     if viewToFocus != nil { 
      print("called1 ") 
      self.setNeedsFocusUpdate(); 
      self.updateFocusIfNeeded(); 
     } 
    } 
} 

override weak var preferredFocusedView: UIView? { 
    if viewToFocus != nil { 
     print("called2 ") 

     return viewToFocus; 
    } else { 
     return super.preferredFocusedView; 
    } 
} 

Im Hinblick Last tat

 self.viewToFocus = myTableView 

Aber das nicht so gut funktionieren.

+0

Does Die Ansicht enthält nur eine Tabellenansicht? Oder enthält es auch andere Ansichten? –

+0

@ Mr.UB ja, es hat collectionview auch .. Ich bearbeite collectionview, wenn Benutzer auf Artikel in uitableview Fokus. Standardmäßig sollte die erste Zelle in der Tabellenansicht angezeigt werden !!! – Saty

+0

Wenn Sie 'prefferedFocusView' sagen, meinten Sie' preferredFocusedView'? – halfer

Antwort

1

In Tableview: WillDisplayCell Methode hinzufügen Code unten

[cell setSelected:YES animated:NO]; 

für die erste Zelle

+0

@RNikam ... dies wird die Zelle auswählen .. Ich will das nicht .. – Saty

1

Sie die Scroll-Position in der oberen Zelle gehen automatisch einstellen.

let topCell:NSIndexPath = NSIndexPath(forRow: 0, inSection: 0) 
self.tableView.scrollToRowAtIndexPath(topCell, atScrollPosition: UITableViewScrollPosition.None, animated: true) 

Ich bin nicht sicher, ob dies das gleiche Verhalten wie preferredFocusedView allerdings ist.

+0

Versucht, dass auch, es funktioniert nicht in tvos – Saty

+0

@Saty meine Entschuldigung Ich habe nie bemerkt, dass es war für Fernsehen. Hoffe, Sie bekommen es sortiert –

0

Fügen Sie den folgenden Code-Schnipsel zur Umsetzung der Viewcontroller-Klasse mit dem Tableview Delegierten aufgerufen:

func tableView(tableView: UITableView, canFocusRowAtIndexPath indexPath: NSIndexPath) -> Bool { 
if indexPath.row == 0 { 
    return true 
} 
return false 
} 
+0

Dies wird es ihm ermöglichen, alle Elemente außer dem ersten Element zu konzentrieren! – jervine10

+0

Dummer Fehler :). Bitte lesen Sie die Bearbeitung. – Sofeda

6

Ich konnte dies erhalten, indem tableView.remembersLastFocusedIndexPath = true in viewDidLoad Einstellung, dann habe ich die delegierte Methode für bevorzugte Fokus implementiert :

func indexPathForPreferredFocusedView(in tableView: UITableView) -> IndexPath? { 
    return NSIndexPath(forItem: 0, inSection: 0) 
} 

Wenn remembersLastFocusedIndexPath - If YES, when focusing on a table view the last focused index path is focused automatically. If the table view has never been focused, then the preferred focused index path is used.