2012-11-05 16 views
7

Robię aplikację na iOS, która jest bazą widokową. Oto, co chcę zrobić. Tableview1 -> Tableview2 Po wybraniu jednego z tableCell wyświetlany jest nowy tableView2. Chciałbym wyostrzyć komórkę przed wyświetleniem nowego tableView. Mimo to hilight jest tak wolny z powodu ładowania nowych danych tableView. Podniosłem wzrok. Powód, dla którego prepareForSegue jest wywoływany przed didSelectRowAtIndexPath.Jak wywołać metodę didSelectRowAtIndexPath przed rozpoczęciemForSegue?

Następnie możesz powiedzieć, jak zadzwonić pod numer didSelectRowAtIndexPath przed prepareForSegue?

Lub powiedz mi, jak skonfigurować komórkę tabeli po wybraniu komórki.

Wszystkiego najlepszego.

Odpowiedz

1
  1. Marka segue dla Controller> kontroler
  2. prowadzony ładowanie danych w didselectrowatindexpath
  3. Kiedy to zrobić -> wykonywać swoją segue
+0

Performsegue jest lepszym rozwiązaniem. Ale zdarzył się kolejny problem. Ale dzięki! –

0

Oto jak zalecana konfiguracja panel kontrolery:

  1. Po załadowaniu kontrolera widoku Widok tabeli 1 załaduj dane w widoku tabeli 1.
  2. Zadzwoń pod tableView:didSelectRowAtIndexPath:, odpal od ulicy przy użyciu performSegue:.
  3. gdy widok kontroler obudowa Table View 2 ładunki, ładunek w danych dla Table View 2.

Brzmi to może być ładowanie danych dla Table View 2 przedwcześnie --- czyli dlaczego” widzę opóźnienie. Ponieważ łączysz główny wątek z ładowaniem danych, interfejs użytkownika nie ma możliwości aktualizacji i pokazuje niebieskie podświetlenie.

Jeśli załadujesz dane w metodzie viewDidLoad, unikniesz kosztownych obciążeń, gdy użytkownik wybierze komórkę widoku tabeli. Powinieneś tylko nakazać kontrolerowi widoku wykonanie przejścia do kontrolera widoku szczegółów w metodzie tableView:didSelectRowAtIndexPath:.

+0

Dzięki to działa. performSegue jest lepszą odpowiedzią do tej pory. –

20

Łączysz dwa różne sposoby, aby to zrobić.

1 - Pierwsza alternatywna - używać tylko storyboardy i prepareForSegue:

podłączyć komórkę do drugiego prototypu viewcontroller w serii ujęć (połączenie musi rozpocząć od komórki, a kończy na drugim viewcontroller). W tym przypadku należy użyć metody only prepareForSegue, a nie metodySelectRowAtIndexPath. Drugi VC jest automatycznie pchany po fazie prepareForSegue.

2 - Druga alternatywna - wykorzystanie didSelectRowAtIndexPath:

użyć didSelectRowAtIndexPath tylko po podłączeniu segue od pierwszego viewcontroller (a nie z komórki) do drugiej viewcontroller. Na końcu metody didSelectRowAtIndexPath musisz wywołać funkcję performSegue.

+0

Dzięki! to działa, ale wystąpił inny problem. Napiszę nowy wątek na ten temat. –

+16

Jeśli używasz pierwszej alternatywy i musisz podjąć działanie w oparciu o położenie komórki w tabeli, użyj tego, aby uzyskać poprawną ścieżkę indexPath: NSIndexPath * indexPath = self.tableView.indexPathForSelectedRow; – mpemburn

+0

Druga alternatywa dla mnie zadziałała. –

1

Potrzebna jest następująca funkcja. Zostanie on wywołany przed readyForSegue. Najpierw trzeba zdefiniować var ​​w was klasie następnie ustawić go w tej funkcji jak poniżej:

var selectedIndexPath: NSIndexPath = NSIndexPath() 

override func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? { 
     selectedIndexPath = indexPath 
     return indexPath 
    } 

wreszcie można użyć tej wartości w funkcji preparedForSegue

+0

Miło działało również dla mnie :) Hamid –

+0

@AadilAli Bez problemu :) – Hamid

Powiązane problemy