尝试创建一个按用户排序帖子的应用程序" up vote"像Reddit。
一直在寻找如何根据"投票"帖子有的(一个Int值)。
在显示帖子的视图控制器中,我认为大部分内容都是相关的。我也在视图中找到了一个搜索栏。
使用以下代码运行时,我的视图控制器中不会显示任何内容。
非常感谢任何帮助
import UIKit
import Firebase
class FeedVC: UIViewController, UITableViewDataSource, UITableViewDelegate, UISearchBarDelegate {
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var searchBar: UISearchBar!
var ref: FIRDatabaseReference!
var posts = [Post]()
static var imageCache = NSCache()
var inSearchMode = false
var filteredVenues = [Post]()
var sortByVotes = [Post]()
private var _post: Post?
var post: Post? {
return _post
}
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
tableView.delegate = self
searchBar.delegate = self
searchBar.returnKeyType = UIReturnKeyType.Done
tableView.estimatedRowHeight = 368
ref = FIRDatabase.database().reference()
DataService.ds.REF_POSTS.observeEventType(.Value, withBlock: { snapshot in
print(snapshot.value)
self.sortByVotes = []
if let snapshots = snapshot.children.allObjects as? [FIRDataSnapshot] {
for snap in snapshots {
print("SNAP: \(snap)")
if let postDict = snap.value as? Dictionary<String, AnyObject> {
let key = snap.key
let post = Post(postKey: key, dictionary: postDict)
self.sortByVotes.append(post)
}
}
}
self.tableView.reloadData()
})
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if inSearchMode {
return filteredVenues.count
}
return sortByVotes.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
//let post = posts[indexPath.row]
if let cell = tableView.dequeueReusableCellWithIdentifier("PostCell") as? PostCell {
cell.request?.cancel()
var img: UIImage?
let post: Post!
posts = posts.sort{$0.votes > ($1.votes)} // added this*****
if inSearchMode {
post = filteredVenues[indexPath.row]
} else {
post = sortByVotes[indexPath.row]
}
if let url = post.imageUrl {
img = FeedVC.imageCache.objectForKey(url) as? UIImage
}
cell.configureCell(post, img: img)
return cell
} else {
return PostCell()
}
}
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
let post = sortByVotes[indexPath.row]
if post.imageUrl == nil {
return 200
} else {
return tableView.estimatedRowHeight
}
}
func searchBarSearchButtonClicked(searchBar: UISearchBar) {
view.endEditing(true)
}
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
if searchBar.text == nil || searchBar.text == "" {
inSearchMode = false
view.endEditing(true)
posts = posts.sort{$0.votes > ($1.votes)} //added this ***
tableView.reloadData()
} else {
inSearchMode = true
let lower = searchBar.text!.lowercaseString
filteredVenues = sortByVotes.filter({$0.venueName!.rangeOfString(lower) != nil})
tableView.reloadData()
}
}
func sortPosts(){ //removed this function******
sortByVotes = posts.sort { $0.votes > ($1.votes)}
tableView.reloadData()
}
}
答案 0 :(得分:0)
因为您已经意识到问题是没有调用单元格排序的函数。我知道你将整个排序代码移到了cellForRowAtIndexPath
中,但如果你把它带回一个函数并且无需重复代码就可以随时调用它,它将更易于维护和重用。
看起来像这样:
func sortPosts(){ //as you already did
sortByVotes = posts.sort { $0.votes > ($1.votes)}
tableView.reloadData()
}
和以下行调用您当前正在对单元格进行排序的排序函数:
self.sortPosts();