Modul optim pentru a configura UIView în UIViewController?

Mă întreb dacă metoda mea de a configura UIViewController-ul meu este optimă sau pur și simplu prost.

Am tastat un enum cu cateva categorii. Să spunem 6 categorii diferite. Așadar, în funcție de categoria selectată. UIViewController-ul meu are un comutator care va apela o metoda diferita pentru a configura UIView-ul meu in functie de categoria selectata.

Mă întrebam dacă este o metodă bună pentru a face acest lucru sau ar trebui să iau în considerare crearea a 6 UIViewControllers diferite?

O discuție cu pro și contra este foarte apreciată.

Mulțumiri.

Ele sunt practic aceleași.

Cod simplu:

switch (self.category) {
    case vegetables:
        recipe = [[[WebServices sharedInstance].recipeDictionary objectForKey:self.chosenCategory] objectAtIndex:4]; //Needs to be made random
        descriptionText.text = recipe.recipeDescription;
        [self setupText];
        [self setupVegetablesView];
        break;
    case dairy:
        recipe = [[[WebServices sharedInstance].recipeDictionary objectForKey:self.chosenCategory] objectAtIndex:4]; //Needs to be made random
        descriptionText.text = recipe.recipeDescription;
        [self setupText];
        [self setupDairyProductsView];
        break;


- (void)setupVegetablesView
{
    descriptionText.textColor = [UIColor colorWithRed:0/255.0 green:103/255.0 blue:55/255.0 alpha:1];

    background.image = imageBackgroundVegetables;
    topBar.image = topBarForVegetables;
    subtitle.image = subtitleImageVegetables;
    subtitleLink.image = subtitleLinkBarVegetables;
...
}
0
Vă rugăm să postați un cod despre cum modificați uiview în funcție de enum
adăugat autor Omar Abdelhafith, sursa

2 răspunsuri

Depinde de situația dvs. Dacă controalele de vizualizare sunt similare, atunci acest lucru are sens. Dar dacă sunt complet diferite unul de celălalt, utilizați subclase separate.

0
adăugat
UIView-urile sunt practic aceleași, cu excepția modificărilor de culoare și a modificărilor de text. Fac toate alocările în vizualizareDidLoad, apoi modificați proprietățile în funcție de categoria aleasă. Mă întreb, de asemenea, dacă ar trebui să folosesc un comutator sau o clauză altfel.
adăugat autor WYS, sursa
@SinLi folosiți un comutator, deoarece dacă doriți să adăugați mai multe vizualizări indentarea dacă altceva ar crește, în loc să utilizați comutatorul ar face mai clar :)
adăugat autor Omar Abdelhafith, sursa

Mi-ar pune în aplicare după cum urmează • Eu ar mai multe UIView derivate clasa fiecare pentru tipul de UIView care am nevoie De exemplu, aș avea VegatableView și DiaryView • fiecare dintre aceste vizualizări va avea aceeași clasă de bază, de exemplu, MyBaseView • MyBaseView va avea o funcție numită setup această funcție va trebui implementată în fiecare dintre clasele mele derivate (legume și jurnal) • în funcție de enum vă voi crea una din aceste clase concrete și apela funcția de configurare

Exemplu:

switch (self.category) {
    MyBaseView recipe;
    case vegetables:
        //Create an instance of VegetableView
        recipe = [[VegetableView alloc] init];
        break;
    case dairy:
        //Create an instance of DiaryView
        recipe = [[VegetableView alloc] init];
        break;
}
//Call setup for the created view
[recipe setup];

//Setup function in vegetableView.m
- (void)setup
{
    //Do some vegetable setup stuff
}

//Setup function in diaryView.m
- (void)setup
{
    //Do some diary setup stuff
}

În acest fel, aș minimaliza codul diferit, aș face parametrul egal pentru ambele tipuri de vizualizare De asemenea, adăugarea de vizualizări noi va fi destul de ușoară, doar subclass MyBaseView și să implementeze o funcție de configurare specializată pentru noua vizualizare Prin urmare, creșteți decuplarea obiectelor și reduceți complexitatea

0
adăugat
Aceasta este în esență ceea ce fac :) tot ce trebuie să aloce sau inițializeze pentru prima dată, o fac în vizualizarea mea UIViewControllerDidLoad și alte configurații sau modificări, o fac în setarea mea ((void) :).
adăugat autor WYS, sursa
Da, asta este o sugestie bună de fapt. Eu văd asta acum :)
adăugat autor WYS, sursa
Da, dar din codul pe care l-am văzut postat este că funcția de configurare se află în interiorul vizualizatorului de sine, ceea ce sugerez este să-l mutați în vederea clasei ele însele. astfel încât în ​​loc de [self setupText] și [self setupSomeThing]; ați sunat la [view setup];
adăugat autor Omar Abdelhafith, sursa
iOS dezvoltatori, România — Moldova
iOS dezvoltatori, România — Moldova
21 participanți

Parteneri: ciupacabra.com, @php_ro, @js_ro, @node_ro, @seo_ro Android: @ro_android