使用来自不同功能的tableviewcell

时间:2017-08-10 08:55:42

标签: ios swift uitableview

我的TableViewCell上有一个likebutton,我在其上添加了一个目标。目标执行一个函数来向API发送类似的东西。

//inside cellForRowAt
cell.likeMessage.tag = indexPath.row
cell.likeMessage.addTarget(self, action: #selector(handleLikes), for:.touchUpInside)

//in viewcontroller class 
func handleLikes(_sender: UIButton){ 
    let index = cell.tag
    Alamofire.request("url")
}

现在我想在handleLikes中的请求之后设置likeMessage.isEnabled = false。 这样做的最佳方法是什么,因为我无法打电话。

解决方案

我已经有了解决方案。我可以打电话:

 _sender.isEnabled = false

4 个答案:

答案 0 :(得分:2)

这样你可以喜欢/不喜欢这条消息。 如果您的按钮已启用,它将发出api请求。如果您的按钮被禁用,它将启用该按钮。

    cell.likeMessage.tag = indexPath.row
    cell.likeMessage.addTarget(self, action: #selector(handleLikes(_:)), for:.touchUpInside)

    func handleLikes(_sender: UIButton){
        if(_sender.isEnabled){
            _sender.isEnabled = false
            Alamofire.request("url")
        }else{
            _sender.isEnabled = true
        }
    }

如果要检索函数中的单元格,可以将indexPath.row作为参数传递,并检索函数中的单元格。

func handleLikes(row: Int){
        let indexPath = NSIndexPath(row: row, section: 0)
        let cell = self.yourTableViewName.cellForRow(at: indexPath as IndexPath) as! YourTableCell
        //here you will have the cell and you can use it as you like
    }

答案 1 :(得分:1)

在目标中传递按钮:

    cell.likeMessage.tag = indexPath.row
    cell.likeMessage.addTarget(self, action: #selector(handleLikes(_:)), for:.touchUpInside)

    //in viewcontroller class 
    func handleLikes(_sender: UIButton){ 
 _sender.isEnabled = false
        let index = cell.tag
        Alamofire.request("url")
    }

答案 2 :(得分:0)

如果表格中不包含某个部分,您可以尝试刷新tableview中的单元格。

let indexPath = NSIndexPath(forRow: sender.tag, inSection: 0)
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Top)

答案 3 :(得分:0)

有很多方法可以实现这一目标。

  1. 使用reloadRowsAtIndexPaths
  2. 使用cellForIndexPath
  3. 将UIButton引用传递给选择器,然后在回调闭包中更新。
  4. 如果你想在likeButton上添加动画效果,请尝试第二或第三。 :d