【问题标题】:Implementing a like button in a tableviewCell in swift快速在uitableviewCell中实现一个like按钮
【发布时间】:2015-11-05 18:32:32
【问题描述】:

我正在尝试在我的每个 tableview 单元格中创建一个like 按钮。按下时,按钮将变为“不喜欢”。我可以通过在我的子类中创建一个 IBOutlet 并在我的 tableviewcontroller 类中使用 sender.setTitle("unlike",forState: UIControlState.Normal) 创建一个 IBAction 方法来做到这一点。但是当我单击它时,该方法也会将一堆其他 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
    }

}

另外,这无关紧要,但如果有人阅读本文可以告诉我如何改进我的风格和/或代码的清晰度,我也将不胜感激。

【问题讨论】:

    标签: ios swift uitableview social-media-like


    【解决方案1】:

    UITableViewCells 是可重复使用的。这意味着您必须将每个单元格的标题设置为“不喜欢”或“喜欢”。最简单的方法,因为我想你无论如何都会读入数据,那就是在你的 ViewController

    中创建一个字符串数组

    将此添加到您的ViewControllervar 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)
    }
    

    【讨论】:

    • 谢谢你,成功了。我会投票,但我没有声望。
    • @HidekazuShidara 没问题。很高兴我能帮上忙!
    • @Caleb 在更改视图控制器或关闭应用程序时,我们如何保留相似和不同的状态。
    • @SomaSharma 你可以考虑使用诸如Core Data之类的东西
    猜你喜欢
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多