操作按钮在UITable

时间:2017-01-02 05:53:02

标签: ios swift uitableview uibutton swift3

我已经通过few of these tutorial而我似乎无法通过按钮点击来调用我的功能。我跟着这个家伙tutorial但没有任何作用。

我的tableView目前工作得很好,我现在正在做的就是添加一个按钮,这样我就可以将数据传递到另一个视图,但我的按钮点击不会调用它的功能。

//class IncomeFeedCell: UITableViewCell: 

@IBOutlet var weak button: UIButton!

查看控制器:

// class IncomeFeedVC: UIViewController, UITableViewDelegate, UITableViewDataSource:

// viewDidLoad:
tableView.delegate = self
tableView.dataSource = self

// cellForRowAt indexPath
let cell = self.tableView.dequeueReusableCell(withIdentifier: "IncomeFeedCell") as! IncomeFeedCell
cell.button.tag = indexPath.row
cell.button.addTarget(self, action: #selector(buttonPressed), for: .touchUpInside)
cell.configureCell(income: income)
return cell

现在点击时调用的函数:

func buttonPressed(){
  print("Tapped")
}

模拟器:

enter image description here

我错过了一些简单的事情吗?

修改

向所有人道歉,并试图帮助并投票,因为我遗漏了更重要的信息。所有这些都在我viewDidLoad IncomeFeedVC中的super.viewDidLoad() tableView.delegate = self tableView.dataSource = self DataService.ds.REF_INCOMES.queryOrdered(byChild: "date").observe(.value, with: { (snapshot) in /** * Sorting the object before looping over * Info here: http://stackoverflow.com/questions/41416359/sort-firebase-data-with-queryordered-by-date */ guard let incomeSnap = snapshot.value as? [String:AnyObject] else{ return } let sorted = incomeSnap.sorted{($0.0.value["date"] as! Double) > ($0.1.value["date"] as! Double)} for snap in sorted { if let incomeDict = snap.value as? [String: AnyObject] { let key = snap.key let income = Income(incomeId: key, incomeData: incomeDict) self.incomes.append(income) } } self.tableView.reloadData() }) 内:

immutability-helper npm package

3 个答案:

答案 0 :(得分:-2)

我的ViewController:

class ViewController: UIViewController , UITableViewDelegate,UITableViewDataSource{
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 5
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell")! as! TestTableViewCell

    cell.bttn.addTarget(self, action: #selector(clickme(sender:)), for: .touchUpInside)
    return cell
}
func clickme(sender: UIButton) {
    print("cliked")
}


}

我的UITableViewCell

import UIKit

class TestTableViewCell: UITableViewCell {

@IBOutlet weak var bttn: UIButton!
override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
}

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}

}

在我的情况下它的工作正常。 你可以删除" self"在你的 let cell = self.tableView.dequeueReusableCell(withIdentifier: "IncomeFeedCell") as! IncomeFeedCell行。

答案 1 :(得分:-4)

你的按钮点击功能应该是这样的:

  func buttonPressed(sender: UIButton)
  {

  let buttonTag = sender.tag// you can check tag like this

  }

答案 2 :(得分:-4)

你可以试试吗

cell.button.addTarget(self, action: #selector(IncomeFeedVC.buttonPressed(_:)), for: .touchUpInside)

还应在IncomeFeedVC类

中实现以下功能
func buttonPressed(_ sender: AnyObject){
  print("Tapped")
}