2017-10-26 1 views
-1

Ich versuche, eine Zeittabelle App mit Benutzereingabewert zu machen. Immer wenn ich versuche, das Ergebnis auf ein Etikett zu drucken, druckt es nur die letzte Zeile und nicht eine vollständige Tabelle.Mehrere Zeilen in UILabel hinzufügen

Wie kann ich Text in UILabel anhängen? Hier ist mein Code:

if let textBox = textField.text{ 
    let textBoxNum = Int(textBox) 

    if let number = textBoxNum{ 
     if number > 0{ 
      let i = 1 

      while i <= 20{ 
       label.text = "\(number) x \(i) = \(number * i)" 
      } 
     } 
     else{ 
      label.text = "Please enter a positive whole number" 
     } 
    } 
    else{ 
     label.text = "Please enter a positive whole number" 
    } 
} 

Antwort

0

Sie überschreiben die Zeichenfolge, indem Sie diese: label.text =. Sie müssen stattdessen den Wert anhängen. Sie sollten auch eine Variable erstellen und den Text anhängen und dann dem Variablenwert label.text zuweisen.

Etwas wie folgt aus:

var text = "" 
if let textBox = textField.text{ 
    let textBoxNum = Int(textBox) 

    if let number = textBoxNum{ 
     if number > 0{ 
      let i = 1 

      while i <= 20{ 
       text += "\(number) x \(i) = \(number * i)\n" 
       // Use of compound operator here will append the text so you have 
       // to use a new line escape character to print the text properly. 
      } 
     } 
     else{ 
      text = "Please enter a positive whole number" 
     } 
    } 
    else{ 
     text = "Please enter a positive whole number" 
    } 
} 
label.text = text 
+0

Vielen Dank für Ihr Feedback. Ich habe versucht, diese Methode zu verwenden, aber es gab mir folgenden Fehler: Kann Wert des Typs String nicht konvertieren? zum erwarteten Argumenttyp 'inout String' Also habe ich label.text = label.text ausprobiert! + "\ (Nummer) x \ (i) = \ (Nummer * i) \ n" und es hat funktioniert. –

+0

@swiftLearner, Sie sollten eine Variable mit dem Namen 'text' deklarieren und den Text anhängen und am Ende der Funktion 'label.text = text'. Ich füge ein Beispiel in meine Antwort ein. –

0

Der Zuweisungsoperator = neu zuweist nur einen neuen Wert auf den Text Ihres Etiketts. Sie müssen zu dem vorhandenen Text hinzufügen, indem Sie den Zuweisungszuweisungsoperator "Compound Assignment Operator" + = verwenden, der einen neuen Wert zuweist, indem er ihn zum vorhandenen Wert hinzufügt.

Dieselbe Terminologie wird auf Ihren Fall angewendet, in dem Sie + = auf der Texteigenschaft des Etiketts verwenden.

if let textBox = textField.text{ 
    let textBoxNum = Int(textBox) 

    if let number = textBoxNum{ 
     if number > 0{ 
      let i = 1 

      while i <= 20{ 
       label.text += "\(number) x \(i) = \(number * i)\n" 
       // Use of compound operator here will append the text so you have 
       // to use a new line escape character to print the text properly. 
      } 
     } 
     else{ 
      label.text = "Please enter a positive whole number" 
     } 
    } 
    else{ 
     label.text = "Please enter a positive whole number" 
    } 
} 

Mehr über Betreiber hier: https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html

+0

Vielen Dank für Ihr Feedback. Ich habe versucht, diese Methode zu verwenden, aber es gab mir folgenden Fehler: Kann Wert des Typs String nicht konvertieren? zum erwarteten Argumenttyp 'inout String' Also habe ich label.text = label.text ausprobiert! + "\ (Nummer) x \ (i) = \ (Nummer * i) \ n" und es hat funktioniert. –

0

Zusätzlich zu den anderen Antworten (mit += und \n für Zeilenumbrüche):

Wenn Sie ein Label verwenden, werden Sie die festlegen müssen Anzahl der Zeilen zu Null, die eine unbegrenzte Anzahl von Zeilen erlaubt:

label.numberOfLines = 0 

Aber Sie migh t besser ein UITextField, um mehrzeiligen Text anzuzeigen, mit dem der Benutzer nach oben und unten scrollen kann, wenn der Text zu lang wird. Sie müssten nur die Bearbeitung/Tastatur Pop-Up deaktivieren, so etwas wie:

class TheViewController: UIViewController, UITextFieldDelegate { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.theTextField.delegate = self 
    } 

    func textFieldShouldBeginEditing(textField: UITextField) -> Bool { 
     return false 
    } 
} 
+0

Ehrfürchtig. Dies ist sehr hilfreich, um Scrollen zu ermöglichen. Vielen Dank –

Verwandte Themen