在swift中实现tableviewCell中的like按钮



我试图在每个tableview单元格中创建一个like按钮。按下后,按钮变为"不一样"。我能够通过在我的子类中创建IBOutlet和在我的tableviewcontroller类中使用sender创建IBAction方法来做到这一点。setTitle("与",forState: UIControlState.Normal)。但当我点击它时,这个方法也会把其他tableviewcell的按钮变成不一样,本质上是复制一个单元格的行为。它这样做的方式是,它改变了每一个其他单元格,所以如果我点击2个连续单元格的"喜欢"按钮,表视图中的所有单元格都会变成"不像"。下面是我的tableViewController代码:

class TableViewController: UIViewController,UITableViewDataSource,UITableViewDelegate {
    @IBOutlet weak var tableView: UITableView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 30
    }
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as TableViewCell
        cell.tag = indexPath.row
        cell.like.tag = indexPath.row
        cell.like.addTarget(self, action: "handleLikes:", forControlEvents: .TouchUpInside)
        return cell
    }
    @IBAction func handleLikes(sender: AnyObject){
        println(sender.tag) // This works, every cell returns a different number and in order.
        sender.setTitle("Pressed", forState: UIControlState.Normal)
    }

下面是TableViewCell类的代码:

class TableViewCell: UITableViewCell {
    @IBOutlet weak var like: 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
    }
}

同样,这是无关的,但如果有人读到这篇文章可以告诉我如何提高我的风格和/或代码的清晰度,我也会很感激的。

UITableViewCell是可重用的。这意味着您必须将每个单元格的标题设置为"不像"或"像"。最简单的方法,因为我想你无论如何都会读取数据,是在ViewController

中创建一个字符串数组。

将此添加到ViewController: var likes: [String]!

在ViewDidLoad: likes = [String](count: 20, repeatedValue: "like")请注意,长度应该基于您将显示的UITableViewCells的数量。

你的cellForRowAtIndexPath:

func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as TableViewCell
    cell.like.tag = indexPath.row
    cell.like.addTarget(self, action: "handleLikes:", forControlEvents: .TouchUpInside)
    cell.like.setTitle(likes[indexPath.row], forState: UIControlState.Normal)
    return cell
}

handleLikes功能:

func handleLikes(sender: AnyObject){
    println(sender.tag) // This works, every cell returns a different number and in order.
    if likes[sender.tag] == "like" {
        likes[sender.tag] = "unlike"
    }
    else {
        likes[sender.tag] = "like"
    }
    sender.setTitle(likes[sender.tag], forState: UIControlState.Normal)
}

相关内容

  • 没有找到相关文章

最新更新