【发布时间】:2017-02-24 20:05:36
【问题描述】:
我想在表格视图单元格上创建一个赞按钮,就像 Instagram、Facebook 和 100 多个其他社交网络应用程序一样,但我很难理解如何在记住 MVC 范式的情况下正确完成此操作。
我的结构是这样的:
Model - FeedPost class
View - FeedCell class (UITableViewCell subclass)
Controller - FeedTableViewController class (UITableViewController subclass)
首先想到的是执行以下操作:
在 FeedCell.swift 中:
@IBAction func likeButtonPressed(_ sender: AnyObject) {
if let button = sender as? UIButton {
post.like(completed: {
if(completed){
button.isSelected = !button.isSelected
}
})
}
}
在 FeedPost.class 中:
func like(completed: (Bool) -> Void ) {
//Make a request to a server and when it is done call
completed(true)
}
但这肯定会破坏 MVC 模式,因为我从视图中访问我的模型。所以我可能想通过视图控制器处理我的数据和视图。视图控制器存储帖子数组。所以我想做以下事情: - 响应用户按下表格视图单元格上的按钮 - 找出喜欢的帖子 - 执行传递帖子 ID 或任何其他引用的服务器请求 - 成功完成请求后,将按钮状态更改为选中
在遵循 MVC 模式的同时,您将如何做到这一点?
任何以正确方式完成的示例或开源项目都将受到高度赞赏。
【问题讨论】:
-
stackoverflow.com/a/40058685/6656894检查我的这个答案同样的问题已经问过
-
您可以使用 tableview 委托方法 didSelectRowAtIndexPath 访问正确的帖子。
-
@HimanshuMoradiya 好的,我想我从你的帖子中得到了正确的想法。唯一的事情是,我想最好使用 indexPathForCell 方法而不是 indexPathForRowAtPoint
-
你。尝试一下,如果遇到任何问题,请使用 tableview delegates 方法更新您的问题。我会解决的
-
我会选择委托,这是一种在 Apple 的 API 中非常流行的模式。看我的回答。
标签: ios swift uitableview model-view-controller