在 swift 3 的 tableview 中更新 tableviewcell 中的特定行?
Update particular row in tableviewcell in tableview in swift 3?
我在 table 视图中使用 tableviewcell.xib。因为我有评论按钮,如果我点击它,我将导航到另一个页面以便我可以评论,当我在评论后关闭时。它将进入 table 查看页面,因为我想更新评论计数值而不更新服务调用。我应该在哪里添加这个代码来更新cell.Please帮助我。
let indexPath = IndexPath(item: sender.tag, section: 0)
self.tableView.reloadRows(at: [indexPath], with: .automatic)
我是这样导航的
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let commentPage = storyBoard.instantiateViewController(withIdentifier: "postCommentsPage") as! PostCommentViewController
self.present(commentPage, animated: false, completion:nil)
您可以使用 NSNotification。在 table 视图的 viewDidLoad 方法中注册通知。比在呈现视图之前发送通知,如下所示..
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let commentPage = storyBoard.instantiateViewController(withIdentifier: "postCommentsPage") as! PostCommentViewController
NotificationCenter.default.post(name: Notification.Name(rawValue: myNotificationKey), object: self)
self.present(commentPage, animated: false, completion:nil)
在通知调用函数中重新加载table视图。
你需要做的是制作一个像 UpdateCommentCount
的 protocol
并在你的控制器中实现该协议,然后在你的 [=17= 中有这个 tableView
] 创建一个 属性 类型 UpdateCommentCount
的实例,也在你的 tableController 中声明一个 属性 类型 Int
来保存点击行的引用。
protocol UpdateCommentCount {
func updateComment(with count:Int)
}
现在用你的控制器实现这个 UpdateCommentCount
并添加一个 Int
属性 来保存点击行的引用,并将它设置在你展示 [=17] 的按钮操作中=]
class YourController: UIViewController, UpdateCommentCount, UITableViewDelegate, UITableViewDataSource {
var currentCommentRow = 0
//Your other methods
func commentButtonAction(_ sender: UIButton) {
currentCommentRow = sender.tag
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let commentPage = storyBoard.instantiateViewController(withIdentifier: "postCommentsPage") as! PostCommentViewController
commentPage.commentDelegate = self
self.present(commentPage, animated: false, completion:nil)
}
func updateComment(with count:Int) {
let dic = yourArray[self.currentCommentRow]
dic["commentCount"] = count
yourArray[self.currentCommentRow] = dic
let indexPath = IndexPath(item: self.currentCommentRow, section: 0)
self.tableView.reloadRows(at: [indexPath], with: .automatic)
}
现在在 PostCommentViewController
中声明一个名为 commentDelegate
类型 UpdateCommentCount
的实例 属性,当您成功 post 评论时只需调用它的委托方法。
var commentDelegate: UpdateCommentCount
成功 post 新评论后调用 updateComment
。
commentDelegate.updateComment(with: newCount)
我在 table 视图中使用 tableviewcell.xib。因为我有评论按钮,如果我点击它,我将导航到另一个页面以便我可以评论,当我在评论后关闭时。它将进入 table 查看页面,因为我想更新评论计数值而不更新服务调用。我应该在哪里添加这个代码来更新cell.Please帮助我。
let indexPath = IndexPath(item: sender.tag, section: 0)
self.tableView.reloadRows(at: [indexPath], with: .automatic)
我是这样导航的
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let commentPage = storyBoard.instantiateViewController(withIdentifier: "postCommentsPage") as! PostCommentViewController
self.present(commentPage, animated: false, completion:nil)
您可以使用 NSNotification。在 table 视图的 viewDidLoad 方法中注册通知。比在呈现视图之前发送通知,如下所示..
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let commentPage = storyBoard.instantiateViewController(withIdentifier: "postCommentsPage") as! PostCommentViewController
NotificationCenter.default.post(name: Notification.Name(rawValue: myNotificationKey), object: self)
self.present(commentPage, animated: false, completion:nil)
在通知调用函数中重新加载table视图。
你需要做的是制作一个像 UpdateCommentCount
的 protocol
并在你的控制器中实现该协议,然后在你的 [=17= 中有这个 tableView
] 创建一个 属性 类型 UpdateCommentCount
的实例,也在你的 tableController 中声明一个 属性 类型 Int
来保存点击行的引用。
protocol UpdateCommentCount {
func updateComment(with count:Int)
}
现在用你的控制器实现这个 UpdateCommentCount
并添加一个 Int
属性 来保存点击行的引用,并将它设置在你展示 [=17] 的按钮操作中=]
class YourController: UIViewController, UpdateCommentCount, UITableViewDelegate, UITableViewDataSource {
var currentCommentRow = 0
//Your other methods
func commentButtonAction(_ sender: UIButton) {
currentCommentRow = sender.tag
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let commentPage = storyBoard.instantiateViewController(withIdentifier: "postCommentsPage") as! PostCommentViewController
commentPage.commentDelegate = self
self.present(commentPage, animated: false, completion:nil)
}
func updateComment(with count:Int) {
let dic = yourArray[self.currentCommentRow]
dic["commentCount"] = count
yourArray[self.currentCommentRow] = dic
let indexPath = IndexPath(item: self.currentCommentRow, section: 0)
self.tableView.reloadRows(at: [indexPath], with: .automatic)
}
现在在 PostCommentViewController
中声明一个名为 commentDelegate
类型 UpdateCommentCount
的实例 属性,当您成功 post 评论时只需调用它的委托方法。
var commentDelegate: UpdateCommentCount
成功 post 新评论后调用 updateComment
。
commentDelegate.updateComment(with: newCount)