作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试制作一款类似 Instagram 的应用。我已经在新闻源表中解析了 json,它们在每个单元格中都是 1 个类似按钮。当按下这个喜欢按钮时,它应该更新我拥有的 LIKEPOST json 并将喜欢的内容增加 1。我遇到的问题是更新喜欢按钮以喜欢每个单元格的帖子。
我附上代码。
这是按下时点赞按钮的功能。
@IBAction func likeBtnPressed(_ sender: Any) {
if !pressed {
let image = UIImage(named: "Like-1.png") as UIImage!
likeBtn.setImage(image, for: .normal)
pressed = true
} else
{
let image = UIImage(named: "liked.png") as UIImage!
likeBtn.transform = CGAffineTransform(scaleX: 0.15, y: 0.15)
UIView.animate(withDuration: 2.0,
delay: 0,
usingSpringWithDamping: 0.2,
initialSpringVelocity: 6.0,
options: .allowUserInteraction,
animations: { [weak self] in
self?.likeBtn.transform = .identity
},
completion: nil)
likeBtn.setImage(image, for: .normal)
pressed = false
likeUpdateServer()
}
}
这是更新like的函数:
func likeUpdateServer()
{
let userDefaults = UserDefaults.standard
let value = userDefaults.string(forKey: "api_token")
let api_token : String! = value
let post_id = "9231"
print(api_token)
print(post_id)
var request = URLRequest(url: URL(string: "\(URL_BASE)\(LIKEPOST)")!)
request.httpMethod = "POST"
let postString = "api_token=\(api_token!)&&post_id=\(post_id)"
request.httpBody = postString.data(using: .utf8)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data, error == nil else { // check for fundamental networking error
print("error=\(String(describing: error))")
print("cant run")
return
}
if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 { // check for http errors
print("statusCode should be 200, but is \(httpStatus.statusCode)")
print("response = \(String(describing: response))")
}
else {
let responseString = String(data: data, encoding: .utf8)
print("responseString = \(String(describing: responseString))")
}
}
}
这是我的 cellForRowAt 函数:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell : PostDataTableViewCell = self.feedTable.dequeueReusableCell(withIdentifier: "contentViewReuse") as! PostDataTableViewCell
let post = posts[indexPath.row]
print(post)
cell.configureCell(post : post)
return cell
}
最佳答案
如果你的请求参数是正确的,那么在你创建一个dataTask之后你需要恢复它,所以在likeUpdateServer
方法的末尾你应该添加这一行
task.resume()
After you create the task, you must start it by calling its
resume()
method.
您可以使用以下代码找到单元格的索引路径。
let point : CGPoint = sender.convert(.zero, tableView)
let indexPath = tableView!.indexPathForItem(at: point)
将这段代码添加到您的按钮点击方法中,并使用您可以找到 postId 的 indexPath。
此外,您应该标记喜欢的单元格(我希望它会从服务器返回)一旦您喜欢一个单元格,您就可以在本地帖子模型中更新它。
关于ios - 如何为服务器上的表格 View 单元格中的每个帖子更新类似按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45790440/
我是一名优秀的程序员,十分优秀!