我已经通过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")
}
模拟器:
我错过了一些简单的事情吗?
修改
向所有人道歉,并试图帮助并投票,因为我遗漏了更重要的信息。所有这些都在我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
答案 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")
}