2012-02-20 17 views
8

Próbuję przełączyć z mojego kontrolera UIViewController do mojego UITableViewController, ale apperendly nie działa tak, jak chcę to. Stworzyłem swój interfejs ze scenorysami od samego początku, więc nie jestem tak naprawdę przenoszony z jednego widoku do drugiego za pomocą kodu. Do tej pory popychałem moje Widoki na serie, które można łatwo zrealizować za pomocą scenorysów. Ale kiedy spróbowałem wrócić do poprzednich widoków, zaimplementowany zostanie nowy ViewController, więc wszystkie moje dane, które zapisałem w starym, zostaną "utracone".Powrót z kontrolera do poprzedniego

Właściwie nie ma kodu mogę ci przedstawić (bo z sergues), ale sytuacja jest:

-> Mam przechowywania rzeczy MutableArray w moim UITableView.

-> Użytkownik dotyka przycisku Skanuj, skanuje nowy element, który powinien zostać zaimportowany do mojej tablicy.

-> Kiedy próbuję wrócić do mojego tableView, pojawia się nowy kontroler, nieświadomy danych, które zapisałem w starym.

W jaki sposób mogę po prostu wrócić do mojego starego kontrolera, aby zapobiec tworzeniu nowego przez cały czas?

Czy push-serge tworzy zawsze nowy kontroler?

(pytanie może być proste, ale jestem nowy w tej rzeczy spróbowałem kilka wyników prezentowanych przez funkcję wyszukiwania, ale żaden z nich nie pracował :(.)

/edit: Problem Popback został rozwiązany ale tablica napełniania problem nadal istnieje Kod:..

GeneralSettings *sharedGS = [GeneralSettings sharedInstance]; 
sharedGS.strEAN = [[NSString alloc] initWithString:strCheckString]; 
[sharedGS.listArray insertObject:strCheckString atIndex:0]; 
NSLog(@"Anzahl der EAN-Codes: %d\nErster Code: %@\n In Variable: %@", sharedGS.listArray.count, [sharedGS.listArray objectAtIndex:0],sharedGS.strEAN); 

danych w sharedGS.strEAN ("83274572354" ie) Dane w listArray (null)

Odpowiedz

20

nie odepchnąć to tworzy nową instancję poprzednia klasa kontrolera. Możesz to zrobić na 2 sposoby.

1: W kodzie wstawiamy następującą instrukcję, aby zwrócić (pop) do kontrolera widoku tabletu.

[self.navigationController popViewControllerAnimated:YES];

2: Jeśli chcesz to zrobić w serii ujęć trzeba zaimplementować następujące klasy zwyczaj Segue:

realizację

// PopSegue.m 

#import "PopSegue.h" 

@implementation PopSegue 

- (void) perform { 

    UIViewController *src = (UIViewController *) self.sourceViewController; 
[src.navigationController popViewControllerAnimated:YES]; 
} 

i nagłówek

// PopSegue.h 

#import <UIKit/UIKit.h> 

@interface PopSegue : UIStoryboardSegue 

@end 

Umieść tę metodę w swoim sterowniku UIViewController, aby ustawić pr wróć do twojego kontrolera UITableViewController:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"goBackToTableView"]) { 
    [[segue destinationViewController] set{whatEverProperyYouWantTo}: {valueOfPropertyToSet}]; 
    } 
} 
+0

Dzięki! Używam pierwszy, ponieważ byłoby to nieco przewymiarowane, aby utworzyć nową klasę dla pojedynczego pop z powrotem. Ale moja tablica nadal nie działa jak przeznaczone ... Sprawdziłem moją zmienną i moje dane tam są ("432436274" na przykład), ale kiedy próbuję dodać to do mojej tablicy z addObject lub insertObject: atIndex cmd, tam nie coś się dzieje. Czy możesz mi w tym pomóc? – blaluma

+0

Kod wygląda następująco: 'Ustawienia ogólne * sharedGS = [GeneralSettings sharedInstance]; sharedGS.strEAN = [[NSString alloc] initWithString: strCheckString]; [sharedGS.listArray insertObject: strCheckString atIndex: 0]; NSLog (@ "Anzahl der EAN-Codes:% d \ n Kod silnika:% @ \ n W zmiennej:% @", sharedGS.listArray.count, [sharedGS.listArray objectAtIndex: 0], sharedGS.strEAN); ' Formatowanie kodu nie działa lub czy robię to źle? "Mój kod"? – blaluma

+0

Można skonfigurować delegata i delegować protokół, ale prostszym sposobem jest użycie drugiej opcji. Drugi sposób jest dość prosty - po prostu skopiuj mój kod do nowej klasy object-c. Następnie w UIViewController zaimplementuj metodę prepareForSegue i ustaw właściwość kontrolera widoku docelowego (Twój UITableViewController). Opublikuję metodę prepareForSegue w może odpowiedzieć powyżej. –

3

@T.J Kiedy przyjąć tę metodę „2: Jeśli chcesz to zrobić w serii ujęć trzeba zaimplementować następujące klasy zwyczaj Segue:

realizacja”

i zgodnie the document z poniższych czynników, „Konfiguracja Destination Controller kiedy Segue jest wyzwalany iOS wykonuje następujące zadania gdy segue jest wyzwalany.

To instancję kontrolera widok docelowy tworzy nową instancję obiektu Segue że posiada wszystkie informacje dotyczące segue jest wyzwalany.Uwaga: Przejście popover zapewnia także właściwość, która identyfikuje kontroler typu popover używany do kontrolowania docelowego kontrolera widoku. Wywołuje metodę prepareForSegue: sender: kontroler źródła, przekazując nowy obiekt segue i obiekt, który uruchomił segue. Wywołuje metodę performingu, aby przenieść kontroler docelowy na ekran. Rzeczywiste zachowanie zależy od rodzaju przeprowadzanego segue. Na przykład, przejście modalne informuje kontroler widoku źródłowego o przedstawienie kontrolera widoku docelowego. Zwolnienie obiektu segue i przejście jest zakończone. "

Powtarza prezentację viewController jeszcze raz, a następnie dealloc po overrid metody" wykonać "nazwie.Dlatego lepiej jest wybrać pierwszą metodę, którą złożyłeś lub methodof delegat według the document.

Dzięki

Powiązane problemy