我正在创建一个应用程序,用户可以在x km半径范围内看到某些项目/用户(很像Tinder,您可以在其中设置您想要在您所在区域看到的女孩/家伙的半径)。所以在我的cellForRowAtIndexPath
函数中,我决定是否可以显示一个单元格。
如果他在半径范围内,则显示事件。如果位置太远,则不应该使用单元格。
我当前的代码只是隐藏了单元格,但它仍然是可点击的。我希望它首先不使用单元格,但我无法找到如何做到这一点。有什么想法吗?
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject?) -> AllGeneralMeetsTableViewCell {
//get location from backend
let locLati = object?["coordLat"] as? Double
let locLongi = object?["coordLong"] as? Double
let currentLocation:CLLocation = CLLocation(latitude: localLati , longitude: localLongi)
let meetLocation:CLLocation = CLLocation(latitude: locLati! , longitude: locLongi!)
let meters:CLLocationDistance = currentLocation.distanceFromLocation(meetLocation)
// make distance in km
let distInKm = meters/1000
//get distance that user has set in his settings
let cell = tableView.dequeueReusableCellWithIdentifier("GeneralMeetsIdentifier") as! AllGeneralMeetsTableViewCell!
if (distInKm <= settingsKm) {
// Extract values from the PFObject to display in the table cel
if let title = object?["title"] as? String {
cell?.titleCell?.text = title
}
if let message = object?["message"] as? String {
cell?.messageCell?.text = message
}
if let image = object?["image"] as? PFFile {
image.getDataInBackgroundWithBlock({ (imageData: NSData?,error: NSError?) -> Void in
if (error == nil) {
let image1 = UIImage(data:imageData!)
cell.imageCell.image = image1
}
})
}
return cell
}
else {
return cell
}
}
}
以下查询返回数据
override func queryForTable() -> PFQuery {
let query = PFQuery(className: self.parseClassName!)
let FBID = myUser.objectForKey("facebookID")!
query.whereKey("facebookID", equalTo: FBID)
query.whereKey("private", equalTo: "false")
return query
}
答案 0 :(得分:1)
您希望在没有数据时使单元格消失。如果我是对的,那么您可以使用名为&#39; DZNEmptyDataSet&#39;显示一些图像告诉用户没有要加载的数据。使用Cocoapods进行安装,或者只是拖动文件并创建桥接头。用法非常简单 - 只需按照GitHub上的文档进行操作即可。
答案 1 :(得分:1)
在你的cellForRowAtIndexPath -
中if cell is to be displayed {
tableView.rowHeight = 120
//Replace 120 with desired rowHeight
} else {
tableView.rowHeight = 0
}
希望这会有所帮助: - )
答案 2 :(得分:0)
Parse提供了一个类型PFGeopoint,甚至在查询中也支持它,使用Parse框架你也可以像从数据库下载东西一样获取位置,这样你只能下载那些可用的帖子。他的范围内的用户......
PFGeoPoint.geoPointForCurrentLocationInBackground { (geoPoint: PFGeoPoint?, error: NSError?) -> Void in
if error == nil { //asynchronous, U have access to GPS location
// create Parse Query
let query: PFQuery = PFQuery(className: "Post")
// 5km range
query.whereKey("gps", nearGeoPoint: geoPoint, withinKilometers: 5.0)
//rest of query....
} else { // dont have access to GPS or whatever
print("Eror location: \(error)")
}
}
答案 3 :(得分:0)
正确的解决方案是从数据源中删除数据,以便首先显示它。但有时这是很多工作。
如果您只想隐藏单元格,可以使用tableView(_:heightForRowAtIndexPath:)
委托方法将其设置为零高度:
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
if indexPath.row == 1 {
return 0.0
}
return tableView.rowHeight
}