/ / MVC i UIButtons - target-c, ios, model-view-controller

MVC i UIButtons - target-c, ios, model-view-controller

Mam projekt iPada, nad którym pracujędynamicznie tworzy wiele przycisków, które muszę dodać do głównego widoku mojej aplikacji. Planowałem wypalić metodę, która żyje wewnątrz mojego widoku z mojego ViewController ... powiedzmy, że nazywa się add_buttons.To moje wrażenie, że we wzorcu MVC, widok powinien obsłużyć renderowanie przycisków i ogólnego wyświetlacza, ale kontroler powinien obsługiwać interakcję. Mam też wrażenie, że to zły projekt, aby "wiedzieć" o kontrolerze widoku.

Sądzę więc, że moje pytanie brzmi: czy powinienem mieć mojelogika dotknięcia przycisku zawartego w moim kontrolerze? Jeśli tak, jak mam sobie radzić z separacją? Jeśli utworzę przyciski w moim widoku, to musiałbym mieć odwołanie do kontrolera widoku, który będzie użyty jako delegat dla obsługi zdarzenia.Jeśli utworzę je w kontrolerze, wtedy czuję, że muszę ustawić pewne Elementy interfejsu użytkownika w kontrolerze wydają mi się błędne Wiem, że brakuje mi czegoś oczywistego, ale jak dotąd wyszukiwanie okazało się bezowocne.

Czy ktoś może wskazać mi właściwy kierunek?

Odpowiedzi:

2 dla odpowiedzi № 1

Logika "dotknij przycisku" zdecydowanie należy do kontrolera.

Kod, który prawdopodobnie tworzy przyciskinależy również do kontrolera. Jednak sensownie byłoby uwzględnić metodę widoku, która zwraca przycisk ze skonfigurowanym wyglądem, ale nie jego zachowanie.

Kilka ogólnych wskazówek:

  • Widok kontrolerów i ich widok są bardzo ściśle powiązane.
  • W razie wątpliwości najlepiej jest umieścić kod w kontrolerze widoku.
  • Interfejs widoków powinien obsługiwać prymitywne typy danych (np. Łańcuchy, liczby, obrazy). Widoki nie muszą znać szczegółów obiektów modelu.

Również konwencja nazewnictwa dla metod lowerCamelCase. Na przykład:add_button powinno być addButton.


1 dla odpowiedzi nr 2

po dodaniu przycisku do wyświetlenia,

[myButton addTarget:nil action:@selector(myButtonPressed) forControlEvents:UIControlEventTouchUpInside];

w widoku kontrolera dodaj

-(void)myButtonPressed {
}

with target: nil event będzie obsługiwany przez pierwszy kontroler zawierający ten widok


0 dla odpowiedzi № 3

Ostrożnie zakończyłem projekt, w którym musiałemdynamicznie twórz UIViews, które zawierały zarówno UITextfields i UILabels. Moje podejście do tego problemu polegało na wywołaniu funkcji "addViews" z poziomu kontrolera widoku. Uznałem, że jest to lepsze i łatwiejsze podejście niż radzenie sobie z kontrolerami widoku z poziomu interfejsu UIView. Przetestowałem swoje podejście i działa całkiem dobrze (dynamicznie zmienia rozmiar UIView i dodaje inne UIViews z UITextfield i UILabel).