单击按钮时如何删除按钮?
How to remove a button when it is clicked?
我是 swift 的新手。我使用 subview
创建了 multiple textfield and button
。我的 ViewController
的输出如下:-
现在我需要删除 "-"
按钮,当它被点击时它是对应的 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()
}
任何帮助将不胜感激...
您可以在任何视图控制器中覆盖方法 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()
}
}
}
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()
}
}
我是 swift 的新手。我使用 subview
创建了 multiple textfield and button
。我的 ViewController
的输出如下:-
现在我需要删除 "-"
按钮,当它被点击时它是对应的 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()
}
任何帮助将不胜感激...
您可以在任何视图控制器中覆盖方法 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()
}
}
}
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()
}
}