坚持以编程方式在swift 3中添加目标到按钮

时间:2016-10-02 08:49:44

标签: ios swift uibutton swift3

我使用Swift 3创建了一个UIButton,我希望它在按下时打印一些消息。

所以我做了这样的事情: 在loadView()

button.addTarget(self, action: #selector(ViewController.pressButton(button:)), for: .touchUpInside)

方法:

func pressButton(button: UIButton) {

    NSLog("pressed!")

}

但是当我点击按钮时没有任何反应。

7 个答案:

答案 0 :(得分:27)

viewDidLoad中添加按钮代码,它将适合您:

override func viewDidLoad() {
    super.viewDidLoad()
    let button = UIButton(frame: CGRect(x: 10, y: 10, width: 100, height: 100))
    button.backgroundColor = UIColor.gray
    button.addTarget(self, action: #selector(pressButton(button:)), for: .touchUpInside)
    self.view.addSubview(button)
}

func pressButton(button: UIButton) {
    NSLog("pressed!")
}

您无需将ViewController.pressButton添加到selector,只需function name即可。

Swift 4.x版本:

let button = UIButton(frame: CGRect(x: 10, y: 10, width: 100, height: 100))
button.backgroundColor = .gray
button.tag = 0
button.addTarget(self, action: #selector(pressButton(_:)), for: .touchUpInside)
self.view.addSubview(button)

@objc func pressButton(_ button: UIButton) {
    print("Button with tag: \(button.tag) clicked!")
}

答案 1 :(得分:6)

在Swift3中试试这个!

button.addTarget(self, action: #selector(self.pressButton(button:)), for: .touchUpInside)

@objc func pressButton(button: UIButton) { NSLog("pressed!") }

答案 2 :(得分:5)

使用以下代码。

button.addTarget(self, action: #selector(FirstViewController.cartButtonHandler), for: .touchUpInside)

您的班级名称对应 FirstViewController

您的选择器对应于以下功能

func cartButtonHandler() {

}

答案 3 :(得分:3)

在swift 3中使用它 -

function getListofItems($itemcode,$leaftype,$color)
{
  $this->db->select('*')->from("tbl_search_list");
  $this->db->where('itemcode' => $itemcode);

  if(is_array($leaftype) && count($leaftype) > 0)
    $this->db->where_in('leaftype', $leaftype);

  if(is_array($color) && count($color) > 0)
    $this->db->where_in('color', $color);


  $this->db->order_by('flag', 'ASC');

  if ($query->num_rows() > 0)
     return $query->result();
}

例如(来自我的代码) -

object?.addTarget(objectWhichHasMethod, action: #selector(classWhichHasMethod.yourMethod), for: someUIControlEvents)

如果您希望将发件人作为参数,请在方法名称后面添加self.datePicker?.addTarget(self, action:#selector(InfoTableViewCell.datePickerValueChanged), for: .valueChanged)

答案 4 :(得分:0)

您提到addTarget来电是loadView()。这是你的自定义子视图,还是viewController?

在您的选择器中,它定位了ViewController类中的方法,但如果此操作的target是视图本身,那么该操作不是有意义的经历。

如果您在viewController中声明了按钮,并在viewDidLoad中添加了此目标,则应在您正在寻找时打印该消息。我相信你是"目标"你的行动是错误的阶级。

答案 5 :(得分:0)

 let cancelButton = UIButton.init(frame: CGRect(x: popUpView.frame.size.width/2, y: popUpView.frame.size.height-20, width: 30, height: 30))
        cancelButton.backgroundColor = UIColor.init(patternImage: UIImage(named: cancelImage)!)
        cancelButton.addTarget(self, action: #selector(CommentsViewController.canceled), for:.touchUpInside)

答案 6 :(得分:0)

  1. override func viewDidLoad()方法
  2. 中添加按钮代码
  3. 确保您的操作处理程序标记为@IBAction,如下所示:

    @IBAction func pressButton(button:UIButton){     打印( “按下!”) }

  4. 然后它会起作用!