5

Wydaje się, że jest to patten używany w aplikacjach Jabłek; Stworzenie nowego rekordu odbywa się za pomocą modalnego widoku, który należy zapisać lub anulować, aby kontynuować, a edycję rekordu wykonuje się poprzez widok pchnięty na stos nawigacyjny.Czy powinienem używać tego samego detektora ViewController do pracy zarówno modalnie, jak i po naciśnięciu?

Nie wydaje się właściwe, aby zasadniczo powielać mój ViewController dla "dodaj" i "edytuj", ale istnieje kilka różnic w tym, jak pchane i modalne ViewControllers działają, które komplikują rzeczy.

Jak mam to zrobić, aby mógł objąć obie bazy?

-

Różnice obejmują.

Po naciśnięciu na stos navBar pojawia się w górnej części widoku i może być skonfigurowany tak, aby zawierał przyciski anulowania/zapisywania. W przypadku prezentacji modalnej tak nie jest, więc aby zduplikować interfejs, należy utworzyć osobny pasek narzędzi i zamiast tego dodać przyciski zamykające/zapisujące.

Kiedy oddalił się popychane widok wysłaliśmy wiadomość do kontrolera nawigacji [self.navigationController popViewControllerAnimated:YES];, kiedy odwoływanie modalne widoku możemy wysłać wiadomość do siebie [self dismissModalViewControllerAnimated:YES];

+1

Jak dokładnie są „rzeczy skomplikowane” między popychanie i prezentując modal? –

+0

Edytowane pytanie z większą szczegółowością – trapper

+3

Podejdę do tego, definiując protokół (trapperViewDismisser), który umożliwił kontrolerowi widoku wskazanie, że jest gotowy do zwolnienia. Następnie dostosuj trapperViewDismisser i ustaw delegację na siebie. Przenosi różnice na klasę, która wyświetla VC (który i tak zna już różnice). – Thompsonian

Odpowiedz

0

Można dodać UIToolbar w InterfaceBuilder, a potem po prostu schować w viewDidLoad gdy self.navigationController nie jest zerowe.

chodzi o odwoływanie, można mieć coś takiego:

- (void)didCancel { 
    [self.navigationController popViewControllerAnimated:YES] || [self dismissModalViewControllerAnimated:YES]; 
} 

to będzie zwarcie jeśli viewcontroller jest częścią navigationcontrol i używać dismissModalViewControllerAnimated inaczej.

To powinno działać dla przycisku anulowania. Dla Państwa przycisk Zapisz, warto zadzwonić jakieś metody delegata takich jak:

- (void)didSave { 
    // do your saving juju here 
    if([self.delegate respondsToSelector:@selector(viewController:didSave:]) { 
     [self.delegate viewController:self didSave:whatJustGotSaved]; 
    } 
    [self.navigationController popViewControllerAnimated:YES]; // noop if currently modal 
} 

W realizacji delegata następnie można umieścić:

- (void)viewController:(UIViewController*)viewController didSave:(NSObject*)whatJustGotSaved { 
    // do stuff with parameters 
    [self.modalViewController dismissModalViewControllerAnimated:YES]; // noop if not modal 
} 
Powiązane problemy