2016-08-02 18 views
0

Ich bin sehr neu zu swift. Ich habe multiple textfield and button mit subview erstellt. Der Ausgang meines ViewController ist unter: - hereWie entferne ich eine Schaltfläche, wenn darauf geklickt wird?

Jetzt muss ich "-" Taste entfernen, und es entspricht textfield, wenn es angeklickt wird. Ich kann jedoch nicht feststellen, auf welche Schaltfläche geklickt wurde. Dies ist mein Code:

var y: CGFloat = 190 
var by: CGFloat = 192 

@IBAction func addRow(sender: AnyObject) { 

    y += 30 
    by += 30 

    let textFiled = UITextField(frame:CGRectMake(50.0, y, 100.0, 20.0)) 

    textFiled.borderStyle = UITextBorderStyle.Line 

    let dunamicButton = UIButton(frame:CGRectMake(155.0, by, 15.0, 15.0)) 
    dunamicButton.backgroundColor = UIColor.clearColor() 
    dunamicButton.layer.cornerRadius = 5 
    dunamicButton.layer.borderWidth = 1 
    dunamicButton.layer.borderColor = UIColor.blackColor().CGColor 
    dunamicButton.backgroundColor = .grayColor() 
    dunamicButton.setTitle("-", forState: .Normal) 
    dunamicButton.addTarget(self, action: #selector(removeRow), forControlEvents: .TouchUpInside) 




    self.view.addSubview(textFiled) 
    self.view.addSubview(dunamicButton) 
} 


func removeRow(sender: UIButton!) { 
    print("Button tapped") 
    self.view.removeFromSuperview() 
} 

jede Hilfe dankbar ...

+0

probiert mit Tags für Schaltflächen ?? –

+1

können Sie Ihren Code anzeigen –

+0

Ich habe meinen Code hinzugefügt – ripa

Antwort

1

EMKA richtig war! Versuchen Sie folgendes:

import UIKit 

class ViewController: UIViewController { 

    var y:CGFloat = 100 
    var textFields = [UIButton : UITextField]() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
    } 

    @IBAction func onAddMoreButtonPressed(sender: AnyObject) { 
     let newButton = UIButton(frame: CGRect(x: 50, y: y, width: 150, height: 20)) 


     newButton.setTitle("New button", forState: .Normal) 
     newButton.backgroundColor = UIColor.blueColor() 
     newButton.addTarget(self, action: #selector(ViewController.onNewButtonPressed(_:)), forControlEvents: .TouchUpInside) 

     self.view.addSubview(newButton) 

     let newTextField = UITextField(frame: CGRect(x: 200, y: y, width: 150, height: 20)) 
     newTextField.text = "New text field" 
     self.view.addSubview(newTextField) 

     textFields[newButton] = newTextField 

     y += 20 
     if y > self.view.frame.height { 
      y = 100 
     } 
    } 

    func onNewButtonPressed(sender: UIButton) { 
     textFields[sender]?.removeFromSuperview() 
     sender.removeFromSuperview() 
    } 

} 
+0

Dieses Konzept funktioniert einwandfrei. aber Problem ist Y wird nicht aktualisiert. So ist die Lücke immer noch da. Gibt es dafür eine Lösung? – ripa

+0

Was wird nicht aktualisiert? Ansicht, Wörterbuch? – eMKa

+0

Ansicht. überprüfen Sie dies - [http://imgur.com/a/dbOKx] – ripa

0

würden Sie die Methode touchesBegan in jedem View-Controller außer Kraft setzen kann. Unter der Annahme, dass Sie eine Reihe der Tasten kann irgendwo

let buttons : [UIButton] = [] 

Sie folgendermaßen vorgehen werden Speichern:

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 

    super.touchesBegan(touches, withEvent: event) 

    guard let touch: UITouch = touches.first else { 
     return 
    } 

    for button in buttons { 
     if touch.view == button { 
      print("This is the button you tapped") 
      button.removeFromSuperview() 
     } 
    } 

} 
+0

Ich bekomme "Uncaught Exception" Fehler in dieser Funktion. – ripa

+0

Nun, diese Antwort basiert auf der Annahme, dass Sie Ihre Ansichten irgendwo speichern und als Anleitung dienen sollen, nicht als endgültige Antwort. Sie müssen mehr Details zu diesem Fehler angeben, damit ich Ihnen helfen kann. – Armin

+0

libC++ abi.dylib: Beenden mit nicht abgefangener Ausnahme vom Typ NSException - dieser Fehler – ripa