我正在使用CLLocationManager来获取当前位置,并且我打印距离(从我当前的位置)到表格单元格中的每个位置。
class TableViewController: UITableViewController, CLLocationManagerDelegate, MKMapViewDelegate {
var thisLocationManager = CLLocationManager()
var myLocation = CLLocation()
...
override func viewDidLoad() {
...
if CLLocationManager.locationServicesEnabled() {
self.thisLocationManager.requestAlwaysAuthorization()
self.thisLocationManager.requestWhenInUseAuthorization()
thisLocationManager.delegate = self
thisLocationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
thisLocationManager.startUpdatingLocation()
}
}
func locationManager(manager: CLLocationManager, didUpdateToLocation newLocation: CLLocation, fromLocation oldLocation: CLLocation) {
myLocation = newLocation
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> SpotCell {
let row = self.list[indexPath.row]
let cell = tableView.dequeueReusableCellWithIdentifier("SpotCell") as! SpotCell
if CLLocationManager.locationServicesEnabled() {
// for checking
print("Row \(indexPath.row): lati \(myLocation.coordinate.latitude), long \(myLocation.coordinate.longitude)")
let spotLocation = CLLocation(latitude: Double(row.latitude)!, longitude: Double(row.longitude)!)
let distance = round(myLocation.distanceFromLocation(spotLocation) / 10) / 100
cell.spotInfo.text = "\(row.spotrank), distance \(distance)km"
} else {
cell.spotInfo.text = row.spotrank
}
return cell
}
这是我用于获取当前位置的代码 当我在iOS9模拟器上设置坐标并运行应用程序时
对于第一个单元格,控制台说:
第0行:lati 0.0,长0.0
第1行:lati 0.0,长0.0
第2行:lati 0.0,long 0.0
第3行:lati 0.0,长0.0
第4行:lati 0.0,long 0.0
第5行:lati 0.0,long 0.0
然后当我向下滚动时...
第6行:lati 51.530466,长-0.123833
第7行:lati 51.530466,长-0.123833
第8行:lati 51.530466,长-0.123833
这些是我设定的坐标。它适用于下一个单元格。
当我向后滚动时
第2行:lati 51.530466,长-0.123833
第1行:lati 51.530466,长-0.123833
第0行:lati 51.530466,长-0.123833
那为什么这不适用于第一页呢?
答案 0 :(得分:0)
听起来好像你在第一页上要求它时没有加载那些必要的数据,但之后就可以了。一旦有了可用的位置,你需要实现一些方法来检测,然后用这些数据(重新)设置单元格。
好消息是你已经有了这种方法!收到func locationManager(manager: CLLocationManager, didUpdateToLocation newLocation: CLLocation, fromLocation oldLocation: CLLocation)
的消息后,请致电self.tableView.reloadData()
,您就会收到数据!