2010-10-16 13 views
7

Chciałbym przedstawić informacje użytkownikowi mojej aplikacji w sposób nie do edycji, ale pozwolić na edycję po naciśnięciu przycisku (przycisku edycji). Czy istnieje sposób na łatwe utworzenie tego przejścia z nieedytowalnego na edytowalny?Udostępnianie edytowalnych i niemożliwych do edycji pól w telefonie iPhone

Rozważałem użycie UILabel s dla pól nieedytowalnych i programowo je usuwając i pokazując UITextField s. Wydaje się jednak, że to formatowanie kodu jest dużo trudniejsze (aby zachować zalety IB).

Rozważałem również posiadanie zarówno UILabel i UITextField w tym samym miejscu w moim stalówce, jak i próbie ukrycia tego, którego nie chcę. Wydaje się to dość hackowate.

Może po prostu będę najlepszy z dwoma oddzielnymi widokami?

Wszelkie komentarze na temat powyższych metod lub lepszych sposobów robienia tego byłyby bardzo mile widziane.

Odpowiedz

7

jeśli ustawisz właściwość enabled UITextField na NO i zmienisz borderStyle na UITextBorderStyleNone twoje pole tekstowe wygląda prawie jak UILabel. Może chcesz przełączyć te dwie wartości. Coś takiego:
EDYCJA: A jeśli zmienisz czcionkę, wyglądają dokładnie tak jak UILabel.

- (IBAction)toggleEdit:(id)sender { 
    for (id subview in self.view.subviews) { 
     if ([subview isKindOfClass:[UITextField class]]) { 
      BOOL isEnabled = ((UITextField*)subview).enabled; 
      ((UITextField*)subview).enabled = !isEnabled; 
      if (isEnabled) { 
       // Disable 
       ((UITextField*)subview).borderStyle = UITextBorderStyleNone; 
       ((UITextField*)subview).font = [UIFont systemFontOfSize:17.0]; 
      } 
      else { 
       // Enable 
       ((UITextField*)subview).borderStyle = UITextBorderStyleRoundedRect; 
       ((UITextField*)subview).font = [UIFont systemFontOfSize:12.0]; 
      } 
     } 
    } 
} 
+0

Świetne, dziękuję. Próbowałem użyć 'textField.enabled' dla tego efektu, ale myślę, że robiłem to zbyt wcześnie. Z obramowaniem i czcionką również działa idealnie. * I * Dowiedziałem się o self.view.subviews! – mmdeas

0

Jak odpowiedział fluchtpunkt, możesz to także zrobić. W przeciwnym razie możesz podać jedną etykietę i jedno pole tekstowe o tym samym rozmiarze ramki. A na edytowalnej wartości true możesz ukryć etykietę pokazującą pole tekstowe. I do edycji fałszywej możesz pokazać etykietę podczas ukrywania pola tekstowego.

Powiązane problemy