2012-04-21 16 views
8

Próbuję zrobić coś bardzo prostego: ustaw segue tak, aby po kliknięciu komórki w tabeli przeniesiono Cię do innego kontrolera widoku. Problem, jak sądzę, wynika z faktu, że TableView te komórki są osadzone w zwykłym ViewControllerze (w przeciwieństwie do TableViewController) i jest jednym z dwóch subviews w tym ViewController.Widok tabeli Segmenty komórek nie działa

O ile mogę powiedzieć, ustawiłem wszystko poprawnie: umieściłem ViewController z dwoma subviewsami w Contoller nawigacji, ustawić go jako źródło danych i delegować do TableView, i utworzyłem push od a TableViewPrzejdź do mojego drugiego kontrolera widoku w scenorysie. Jednak po uruchomieniu aplikacji i kliknięciu przez użytkownika wiersza w tabeli, po prostu wybiera wiersz, a segue nie uruchamia się wcale (debugowałem go, a funkcja prepareForSegue nie jest nawet wywoływana).

Czy jest tu coś, czego mi brakuje? Czy jest to z jakiegoś powodu niemożliwe, jeśli TableView nie jest jedynym widokiem w swoim kontrolerze widoku?

+0

dałeś komórek tabeli unikalne identyfikatory –

+0

dam komórki to identyfikator "LoadCell" zarówno w scenorysie (w atrybutach prototypowej komórki), jak iw funkcji cellForRowAtIndexPath; czy to jest poprawne, czy każda pojedyncza komórka powinna mieć wyraźny identyfikator podczas jej tworzenia? – generaltsow

Odpowiedz

2

Jeśli tworzysz serii ujęć w Xcode następnie wykonaj następujące czynności:

  1. Tworzenie UITableViewController
  2. Dodaj prototyp UITableViewCell
  3. Utwórz UIViewController, który będzie twój cel segue.
  4. Control - Kliknij prototyp UITableViewCell i przeciągnij do miejsca docelowego segu.

To wszystko. Prawdopodobnie będziesz chciał edytować właściwości UITableViewCell, na przykład swoją podklasę UITableViewCell.

+2

To jest dokładnie to, co zrobiłem, z wyjątkiem tego, że zamiast mieć UITableViewController mam regularny UIViewController, z UITableView (jak również innym UIView) jako subviews w głównym widoku. Nadal nie działa. – generaltsow

+0

W Xcode, to odsunięcie storyboardu tableViewCell "push" połączone z kontrolerem, który jest twoim celem segue? – GoZoner

+0

Tak, oczywiście. – generaltsow

4

To może ci pomóc, ale wpadłem na ten problem, ponieważ zdefiniowałem dwa różne typy komórek i wprowadziłem implementację didSelectRowAtIndexPath. Musiałem dodać [self performSegueWithIdentifier:@"Whatever" sender:self] jako część didSelectRowAtIndexPath i problem został rozwiązany.

Jeśli jesteś w stanie przynajmniej wykryć selekcje wierszy, możesz skorzystać z tej metody.

+0

Rozwiązało to problem dla mnie, ale z nadawcą jako komórką: 'sender: [self.tableView cellForRowAtIndexPath: indexPath]' – brasskazoo

4

Jeśli dostosował renderowania komórek, np .:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

następnie upewnić się, że używasz tego samego identyfikatora komórki, jak określono w komórce prototypu w Ste historii.

Tak więc w tym przypadku "Identyfikator" komórki, która podłączył segue, powinien mieć wartość "Komórka".

+0

Spędziłem ostatnie dwie godziny próbując to rozgryźć (dopiero zacząłem bawić się z Objective-C Tego wieczoru Wielkie dzięki, to doprowadzało mnie do szału –

+0

To jest odpowiedź, dziękuję –

4

Uważam, że jeśli niedawno podłączyłem segue z widoku akcesoriów komórki, a później usunąłem segue i spróbowałem podłączyć nowy segue do komórki, to nie działa to ani (używając Xcode 4.6.2) - - Xcode stale łączy przejście do widoku akcesoriów (nawet jeśli go nie ma)! Sposób, w jaki to naprawiłem, polega na wybraniu komórki w IB i użyciu inspektora połączenia w celu (1) usunięcia pierwotnej sekwencji "akcji akcesoriów" i (2) bezpośredniego podłączenia selekcji "wyboru" poprzez przeciągnięcie z wypełnionego koła na obraz poniżej do odpowiedniego kontrolera widoku docelowego.

enter image description here

+0

masz rację, to właśnie się dzieje –

+0

nadal istotne dla Xcode 8 :) wielkie dzięki. rozwiązano mój problem – gutte

-1

miał ten sam problem.Przeniesienie z prototypowej komórki widoku tabeli do zwykłego kontrolera widoku spowodowałoby awarię aplikacji. Na wypadek, gdyby ktoś miał ten sam problem.

Moje rozwiązanie:

Jeśli używasz segue Push upewnić się, że pierwszy View Controller z widoku tabeli jest wbudowany w kontroler nawigacji inaczej „Push segues” przyzwyczajenie praca. Wskaż także miejsce docelowe w miejscu docelowym View Controller, a nie w kontrolerze nawigacyjnym!

Jak wspomniano wcześniej, upewnij się, że Twoje "identyfikatory segue" są prawidłowe.

w "didSelectRowAtIndexPath" Wzywam "[self performSegueWithIdentifier: @" Your_destination_View_Controller”nadawcy: self];

+0

Dodanie performSegueWithIdentifier powoduje awarię mojej aplikacji, powodując niepowodzenie asercji w - [UITableViewCell _setHostsLayoutEngine:]. Najwyraźniej nikt wcześniej nie rozwiązał tego problemu, ponieważ nie ma tu odpowiedzi na SO. –

0

miałem podobny problem Fix jest 1. Zapis SegueIdentifier dla segue w Storyboard 2.. Dodaj następujący wiersz [self performSegueWithIdentifier: @ „SegueIdentifier” nadawcy: nil];..? w didSelectRowAtIndexPath

mam nadzieję, że to pomoże

+0

Pracowałem dla mnie. Dzięki! – kalan

+0

Dodanie performSegueWithIdentifier powoduje awarię mojej aplikacji, powodując niepowodzenie asercji w - [UITableViewCell _setHostsLayoutEngine:]. Najwyraźniej nikt wcześniej nie rozwiązał tego problemu, ponieważ nie ma tu odpowiedzi na SO. –

Powiązane problemy