2016-05-19 12 views
2

In meinem aktuellen Projekt muss ich mehrere Container-Controller in einem einzigen View-Controller verwalten. Es gibt vier Tasten am View-Controller. Wenn die erste Schaltfläche ausgewählt ist, wird der erste Container sichtbar und der verbleibende Container wird ausgeblendet. Ähnlich wie der zweite, dritte und vierte Knopf. Zu jeder Zeit wird nur einer für den Benutzer sichtbar sein. Ich kann es erreichen, indem ich den jeweiligen Behälter zeige und die Ruhe durch Festcodierung verstecke.So verbergen Sie mehrere Ansichten auf effektive Weise in ios

@property UIView *view1; 
@property UIView *view2; 
@property UIView *view3; 
@property UIView *view4; 

- (iBAction *)firstButtonClicked:(UIButton *)button { 
self.view1.hidden = NO; 
self.view2.hidden = YES; 
self.view3.hidden = YES; 
self.view4.hidden = YES; 
} 

- (iBAction *)secondButtonClicked:(UIButton *)button { 
self.view1.hidden = YES; 
self.view2.hidden = NO; 
self.view3.hidden = YES; 
self.view4.hidden = YES; 
} 

- (iBAction *)thirdButtonClicked:(UIButton *)button { 
self.view1.hidden = YES; 
self.view2.hidden = YES; 
self.view3.hidden = NO; 
self.view4.hidden = YES; 
} 

- (iBAction *)fourthButtonClicked:(UIButton *)button { 
self.view1.hidden = YES; 
self.view2.hidden = YES; 
self.view3.hidden = YES; 
self.view4.hidden = NO; 
} 

Aber ich bin nicht mit dem Ansatz zufrieden. Ich habe versucht, Antwort im Stapelüberlauf zu suchen, aber nicht erfolgreich. Bitte teilen Sie mir mit, ob ein Körper einen effektiven Ansatz kennt, um dies zu erreichen.

Danke.

Antwort

2

Hier gibt es einige mögliche Lösungen. Hier ist eine Option.

Geben Sie zunächst jeder Schaltfläche ein bestimmtes Tag. Geben Sie Button 1 ein Tag von 1 ein. Geben Sie Button 2 ein Tag von 2 usw. ein.

Verwenden Sie dann eine einzige Aktion für alle vier Schaltflächen anstelle der vier separaten Aktionen, die Sie jetzt haben.

Dann die eine Aktion Methode wie folgt implementieren:

- (IBAction *)buttonClicked:(UIButton *)button { 
    self.view1.hidden = button.tag != 1; 
    self.view2.hidden = button.tag != 2; 
    self.view3.hidden = button.tag != 3; 
    self.view4.hidden = button.tag != 4; 
} 

Wenn die Taste mit einem Tag von 1 abgegriffen wird, dann wird button.tag != 1 so self.view1.hidden falsch sein wird NO eingestellt werden. Die anderen 3 Bedingungen werden erfüllt, so dass die anderen Tasten hidden auf YES gesetzt haben.

Die gleiche Logik gilt für die anderen drei Schaltflächen mit jeweils eigenen Tag-Werten.

2

Geben Sie die Ansichten-Tags wie 201 bis 204 oder etwas, das Sie mögen, setzen Sie die for-Schleife entsprechend.

Punkt die Aktionen aller Tasten an den unten Selektor,

- (void)anyButtonClicked:(UIButton *)button 
{ 

    for (int iterator = 201; iterator < 204; iterator ++) 
    { 
     UIView *currentView = [self.view viewWithTag:iterator]; 

     if (currentView.tag == button.tag) 
     { 

      [currentView setHidden:NO]; 

     } else { 

      [currentView setHidden:YES]; 
     }   
    } 
} 
1

Sie dies auch versuchen können, es wird auch verbrauchen weniger speicher-

[yourview removeFromSuperview]; 
     yourview = nil; 
1

jederzeit nur eine sichtbar ist . Warum musst du alle verstecken/verstecken? Tun Sie einfach die folgenden (kurz nach den @property Erklärungen):

UIView *lastVisible = view1; 

Und dann können Sie die Aktionen wie schreiben:

- (IBAction *)firstButtonClicked:(UIButton *)button { 
lastVisible.hidden = YES; 
self.view1.hidden = NO; 
lastVisible = self.view1; 
} 

und so weiter. Dies setzt voraus, dass view1 zuerst die sichtbare Ansicht ist.

Verwandte Themen