2016-08-02 8 views
0

Я - новый пользователь для swift. Я создал multiple textfield and button с помощью subview. Выход моей ViewController ниже: - hereКак удалить кнопку при нажатии?

Теперь мне нужно удалить "-" кнопку, и это соответствующая textfield при щелчке. Но я не могу определить, какая кнопка нажата. Это мой код:

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() 
} 

любая помощь будет оценена ...

+0

попытался использовать теги для кнопок ?? –

+1

вы можете показать код ура –

+0

Я добавил свой код – ripa

ответ

1

EMKA был прав! Попробуйте следующее:

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

Эта концепция работает нормально. но проблема Y не обновляется. поэтому разрыв все еще существует. Есть ли какое-нибудь решение для этого? – ripa

+0

Что не обновляется? Просмотр, словарь? – eMKa

+0

вид. проверьте это - [http://imgur.com/a/dbOKx] – ripa

0

Вы можете переопределить метод touchesBegan в любом контроллере представления. Предполагая, что вы храните массив из кнопок где

let buttons : [UIButton] = [] 

вы можете сделать следующее:

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

Я получаю ошибку «uncaught exception» в этой функции. – ripa

+0

Ну, этот ответ основан на предположении, что вы где-то сохраняете свои взгляды и предназначаетесь для руководства, а не для окончательного ответа. Вы должны дать более подробную информацию об этой ошибке, чтобы я мог вам помочь. – Armin

+0

libC++ abi.dylib: завершение с неперехваченным исключением типа NSException - эта ошибка – ripa

Смежные вопросы