2016-03-31 1 views
3

In meinem Code zu starten:Swift: Tippen Sie auf ein Textfeld eine Aktion

@IBOutlet weak var textField: UITextField! 

@IBAction func textField(sender: AnyObject) { 

    if textField.text != "" { 
     let newSweet = CKRecord(recordType: "Chat") 
     newSweet["content"] = textField.text 
     textField.delegate = self 
     let publicData = CKContainer.defaultContainer().publicCloudDatabase 
     publicData.saveRecord(newSweet, completionHandler: { (record:CKRecord?, error:NSError?) -> Void in 
      if error == nil { 
       dispatch_async(dispatch_get_main_queue(), {() -> Void in 
        self.tableView.beginUpdates() 
        self.sweets.insert(newSweet, atIndex: 0) 
        let indexPath = NSIndexPath(forRow: 0, inSection: 0) 
        self.tableView.insertRowsAtIndexPaths([indexPath], withRowAnimation: 
         .Top) 
        func textFieldShouldReturn(textField: UITextField) -> Bool { 
         self.textField.resignFirstResponder() 

         return true 
        }}) 

      }else{ 
       print(error) 
       } 
     }) 
    } 
} 

Ich versuche cloudKit so zuzugreifen, wenn Sie etwas in der UITextField geben es die UITextField@IBAction aktiviert. Was passiert jetzt, wenn ich Text in die UITextField eingeben passiert nichts, also brauche ich es, um die @IBAction zu aktivieren. Hat jemand eine Lösung?

+0

Sie TextFieldDelegate die Funktion zu tun verwenden sollte es – Khuong

Antwort

3

verwenden Delegatmethoden

class ViewController: UIViewController,UITextFieldDelegate //set delegate to class 

@IBOutlet var txtValue: UITextField    //create a textfile variable 

override func viewDidLoad() { 
    super.viewDidLoad() 
    txtValue.delegate = self     //set delegate to textfile 
} 


func textFieldDidBeginEditing(textField: UITextField!) { //delegate method 

let newSweet = CKRecord(recordType: "Chat") 
     newSweet["content"] = textField.text 
     textField.delegate = self 
     let publicData = CKContainer.defaultContainer().publicCloudDatabase 
     publicData.saveRecord(newSweet, completionHandler: { (record:CKRecord?, error:NSError?) -> Void in 
      if error == nil { 
       dispatch_async(dispatch_get_main_queue(), {() -> Void in 
        self.tableView.beginUpdates() 
        self.sweets.insert(newSweet, atIndex: 0) 
        let indexPath = NSIndexPath(forRow: 0, inSection: 0) 
        self.tableView.insertRowsAtIndexPaths([indexPath], withRowAnimation: 
         .Top) 
       func textFieldShouldReturn(textField: UITextField) -> Bool { 
        self.textField.resignFirstResponder() 

        return true 
} 

func textFieldShouldEndEditing(textField: UITextField!) -> Bool { //delegate method 
    return false 
} 

func textFieldShouldReturn(textField: UITextField!) -> Bool { //delegate method 
    textField.resignFirstResponder() 

    return true 
} 
+0

Haben u meine Antwort versucht? –

+0

Es funktioniert nicht Ich habe genau das getan, was du getan hast, aber wenn ich drücke, gib nichts ein –

+0

Aus irgendeinem Grund funktioniert es nicht –

4

In Ihrem ViewController, Import-Protokoll UITextFieldDelegate wie folgt aus:

class YourViewController: UIViewController,UITextFieldDelegate 

in Ihrem viewDidLoad wie folgt tun:

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

Und Sie müssen installieren Delegiertenmethode:

func textFieldDidBeginEditing(textField: UITextField!) { 
     let newSweet = CKRecord(recordType: "Chat") 
     newSweet["content"] = textField.text 
     textField.delegate = self 
     let publicData = CKContainer.defaultContainer().publicCloudDatabase 
     publicData.saveRecord(newSweet, completionHandler: { (record:CKRecord?, error:NSError?) -> Void in 
      if error == nil { 
       dispatch_async(dispatch_get_main_queue(), {() -> Void in 
        self.tableView.beginUpdates() 
        self.sweets.insert(newSweet, atIndex: 0) 
        let indexPath = NSIndexPath(forRow: 0, inSection: 0) 
        self.tableView.insertRowsAtIndexPaths([indexPath], withRowAnimation: 
         .Top) 
        func textFieldShouldReturn(textField: UITextField) -> Bool { 
         self.textField.resignFirstResponder() 

         return true 
        }}) 

} 

Wenn Sie Return auf dem Keyboard entlassen werden, die Tastatur klicken möchten, müssen Sie dieses TextFieldDelegate Methode installieren

func textFieldShouldReturn(textField: UITextField) -> Bool { 
     self.textField.resignFirstResponder() 
     return true 
    } 
+0

Wenn ich auf "Enter" klicke, funktioniert es immer noch nicht. –

+0

Ich ersetzte die anderen @IBAction durch func textFieldDidBeginEditing –

+0

funktioniert nicht wissen Sie, wie es zu beheben? Vielen Dank! –