2016-08-26 2 views
-2

Ich bin neu in iOS Dev mit swift 3 Ich möchte das Ergebnis der Berechnungen mit UITextField so anzeigen + -/* bottoms Ich habe eine ToolBar mit Artikeln über Nummer implementiert Pad, aber ich kann nicht mit UITextField ohne einen Fehler interagieren. Ich verbrachte einige Stunden zu lesen und ich fand einige Lösungen mit Aktionsparameter, aber keiner funktionierte.Wie man mit UITextField (Swift) interagiert

func addDoneButtonOnNumpad (textfield: UITextField) {

let keypadToolbar: UIToolbar = UIToolbar() 

    // add a done button to the numberpad 
    keypadToolbar.items=[ 
     UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.done, target: textField, action: #selector(UITextField.resignFirstResponder)), 
     UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: self, action: nil), 

     UIBarButtonItem(title: "+", style: UIBarButtonItemStyle.done, target: self, action: #selector(self.addSum(_:))), 
     UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: self, action: nil), 
     UIBarButtonItem(title: "-", style: UIBarButtonItemStyle.done, target: textField, action: #selector(UITextField.resignFirstResponder)), 
     UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: self, action: nil), 
     UIBarButtonItem(title: "/", style: UIBarButtonItemStyle.done, target: textField, action: #selector(UITextField.resignFirstResponder)), 
     UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: self, action: nil), 
     UIBarButtonItem(title: "=", style: UIBarButtonItemStyle.done, target: textField, action: #selector(UITextField.resignFirstResponder)) 
    ] 
    keypadToolbar.sizeToFit() 
    // add a toolbar with a done button above the number pad 
    textField.inputAccessoryView = keypadToolbar 
} 



@IBAction func addSum(_ sender: UITextField) 
{ 

    sender.insertText("+") 

} 

ich jetzt meinen Code dank NDoc ändern finde ich einen Fehler von abgefangene Ausnahme vom Typ NSException ich weiß nicht, was Mittel ist, aber ich nehme an wie ein Segmentation Fault könnte sein.

Außerdem habe ich meine IBAction mit dem UIexxtfield verbunden, mit dem ich interagieren möchte. Eigentlich möchte ich + oder - oder/oder * zu der Zahl in der UITextField hinzufügen und die Mathematik mit einer anderen und das Ergebnis in der gleichen UITextField anzeigen.

Grüße

http://i.stack.imgur.com/dIscv.png

+0

Bitte bearbeiten Sie Ihre Frage mit einer TEXT-Version Ihres Codes und geben Sie an, in welcher Zeile Sie einen Fehler haben. Link-only-Fragen sind schlecht, weil sie nach Ablauf der Links nutzlos werden. –

Antwort

0

Zuerst ändern Sie Ihre selector Syntax wie folgt.

UIBarButtonItem(title: "+", style: UIBarButtonItemStyle.done, target: self, action: #selector(self.sayHello(_:))) 

Jetzt in swift 3.0 müssen Sie den Namen des ersten Parameter zu übergeben, so dass Ihre sayHello Aktion wie folgt ändern.

func sayHello(_ sender: UIBarButtonItem) { 
    theTextField.text = "Hello!" 
} 

Hinweis: Der Parameter Art der Methode ist entweder AnyObject oder UIBarButtonItem, nicht die NSButton wie auf der obigen Antwort.

+0

Vielen Dank für Ihr Code-Snippet. Ich habe es versucht und es funktioniert. –

+0

Ihre Antwort hat mir geholfen, die Syntax von Selektor und Interaktion mit der Schaltfläche zu verstehen, aber ich bin immer noch fest. –

+0

Dann müssen Sie neue Post auf SO mit Ihrem neuen Problem hinzufügen. –

1

Wenn Sie eine Objective-C Methode, die Sie auf eine Schaltfläche verbinden wollen, dann würden Sie die Zeichenfolge-Format für Aktion verwenden, die Sie verwenden. (Obwohl ich davon überzeugt bin, dass Swift 3 den String-Stil des Definierens eines Selektors weglässt, sollten Sie sich angewöhnen, immer #selector zu verwenden.)

Für eine Swift IBAction-Methode wären Sie besser dran #selector, die eine Swift-Funktionsdefinition nimmt, wie

#selector(sayHello(_:)) 

Beachten Sie, dass, wenn Sie eine benutzerdefinierte Unterklasse von UITextField erstellt haben, können Sie nicht eine Nachricht wie sayHello zu einem UITextField senden können.

Normalerweise stellen Sie Ihren View-Controller als Ziel für Ihre Aktionen ein und implementieren dann eine Methode in Ihrem View-Controller, die die Aktion verarbeitet und beispielsweise Nachrichten in das Textfeld einfügt.

Ihr Code könnte wie folgt aussehen:

UIBarButtonItem(title: "Done", 
    style: .done, 
    target: self 
    action: #selector(sayHello(_:)) 

Und Sie könnten eine sayHello Methode in Ihrer View-Controller wie folgt definieren:

@IBAction func sayHello(sender: NSButton) { 
    theTextField.text = "Hello!" 
} 

P. S. Veröffentlichen Sie keine Screenshots von Code. Fügen Sie den Code in Ihre Frage ein, wählen Sie ihn aus und formatieren Sie ihn als Quellcode mit dem Code-Tool. Wenn Sie den Fehler anzeigen möchten, können Sie einen Screenshot ALSO hinzufügen, aber Ihren Code immer als formatierten Text in Ihre Frage einfügen.

+0

Danke für Ihre schnelle Antwort, ich habe versucht, in meinem Code zu ändern, aber es funktioniert sowieso nicht mit der Selektor-Syntax Ich bin neu, also muss ich etwas vergessen. Ich habe keine Unterklasse von UITextField erstellt. Mein letzter Zweck ist die Berechnung im UI-Textfeld wie zB 5 + 7, aber ich kann keine Schaltfläche im Storyboard erstellen, da meine Symbolleiste eine Erweiterung des Nummernblocks ist. –

+0

Wenn du neu bist, musst du langsamer werden. Bearbeiten Sie Ihre Frage, um den neuen Code unten zu sehen, zusammen mit dem Fehler, den Sie erhalten. –

+0

Einige der Dinge, die du gerade gesagt hast, ergeben für mich keinen Sinn. Sie werden keine Berechnung in UITextField durchführen. Sie werden die Ergebnisse einer Berechnung in einem Textfeld anzeigen. Ich verstehe auch nicht, was Sie mit "... meine Symbolleiste ist eine Erweiterung des Nummernblocks" gemeint haben. –

Verwandte Themen