Ios 快速拉动刷新不需要';不显示
我已经在我的Swift项目的UITableView上成功添加了刷新拉,但在另一个ViewController上我无法显示它。 在其他视图上,代码相同,没有LocationManager功能。 我不知道我的错误在哪里 我的代码下方:Ios 快速拉动刷新不需要';不显示,ios,swift,locationmanager,pull-to-refresh,Ios,Swift,Locationmanager,Pull To Refresh,我已经在我的Swift项目的UITableView上成功添加了刷新拉,但在另一个ViewController上我无法显示它。 在其他视图上,代码相同,没有LocationManager功能。 我不知道我的错误在哪里 我的代码下方: import UIKit import CoreLocation class MainViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, CLLocati
import UIKit
import CoreLocation
class MainViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, CLLocationManagerDelegate {
var locationManager: CLLocationManager!
var locationCoordinates: CLLocationCoordinate2D!
@IBOutlet weak var bannerView: GADBannerView!
var dati = NSMutableArray()
var datiComplete = NSDictionary()
@IBOutlet weak var tableView: UITableView!
var arrayOfData: [MyData] = [MyData]()
var url:NSURL!
var refreshControl = UIRefreshControl()
var dateFormatter = NSDateFormatter()
override func viewDidLoad() {
super.viewDidLoad()
self.locationManager = CLLocationManager()
self.locationManager.delegate = self
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest //Battery drain!
self.locationManager.distanceFilter = 1
self.locationManager.requestWhenInUseAuthorization()
self.locationManager.startUpdatingLocation()
searchUser()
self.dateFormatter.dateStyle = NSDateFormatterStyle.ShortStyle
self.dateFormatter.timeStyle = NSDateFormatterStyle.LongStyle
self.refreshControl = UIRefreshControl()
self.refreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
self.refreshControl.addTarget(self, action: "refresh:", forControlEvents: UIControlEvents.ValueChanged)
self.tableView.insertSubview(refreshControl, atIndex: 0)
self.handleRefresh()
}
func refresh(sender:AnyObject)
{
println("Refresh work!")
self.handleRefresh()
}
func handleRefresh() {
if locationManager.location != nil {
url = NSURL(string: "http://www.myURL.com/data.php?lat=\(locationManager.location.coordinate.latitude)&lon=\(locationManager.location.coordinate.longitude)&max=15&when=now")!
} else {
url = NSURL(string: "http://www.myURL.com/data.php?lat=41&lon=11&max=10&when=now")!
}
//println("Call URL!!")
var request:NSMutableURLRequest = NSMutableURLRequest(URL: url)
request.HTTPMethod = "GET"
request.setValue("application/json", forHTTPHeaderField: "Accept")
var reponseError: NSError?
var response: NSURLResponse?
//var urlData: NSData? = NSURLConnection.sendSynchronousRequest(request, returningResponse:&response, error:&reponseError)
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler: {
response, data, error in
if (error != nil) {
return
}
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
var error: NSError?
self.dati = (NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers, error: &error) as! NSDictionary)["spots"] as! NSMutableArray
if (error != nil){
return
}
// **** Json Parsing *****
dispatch_async(dispatch_get_main_queue()){
self.tableView.reloadData()
self.tableView.delegate = self
self.tableView.dataSource = self
}
}
})
let now = NSDate()
let updateString = "Last Updated at " + self.dateFormatter.stringFromDate(now)
self.refreshControl.attributedTitle = NSAttributedString(string: updateString)
if self.refreshControl.refreshing
{
self.refreshControl.endRefreshing()
}
self.tableView?.reloadData()
refreshControl.endRefreshing()
}
func searchUser(){
println("Start Search User")
self.locationManager.delegate = self
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
self.locationManager.requestAlwaysAuthorization()
self.locationManager.startUpdatingLocation()
}
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!){
println("Start Location Manager Func")
self.locationCoordinates = manager.location.coordinate
self.locationManager.stopUpdatingLocation()
println("**************** locations = \(self.locationCoordinates.latitude) \(self.locationCoordinates.longitude)")
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
self.setNavigationBarItem()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return arrayOfData.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: ViewCell = tableView.dequeueReusableCellWithIdentifier("Cell") as! ViewCell
cell.backgroundColor = UIColor.whiteColor()
let usr = arrayOfData[indexPath.row]
cell.setCell(<Cell-data>)
return cell
}
var selectedSpot:String? = nil
var selectedSpotIndex:Int? = nil
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "GoSpotDetails" {
var tabBarC : TabBarController = segue.destinationViewController as! TabBarController
var caseIndex = tableView!.indexPathForSelectedRow()!.row
var selectedCase = self.arrayOfSpotsTemp[caseIndex]
tabBarC.DataDetail = selectedCase
}
}
}
导入UIKit
导入核心定位
类MainViewController:UIViewController、UITableViewDataSource、UITableViewDelegate、CLLocationManagerDelegate{
var locationManager:CLLocationManager!
变量位置坐标:CLLocationCoordinate2D!
@IBVAR bannerView:GADBannerView!
var dati=NSMutableArray()
var datiComplete=NSDictionary()
@IBVAR表格视图:UITableView!
var arrayOfData:[MyData]=[MyData]()
var-url:NSURL!
var refreshControl=UIRefreshControl()
var dateFormatter=NSDateFormatter()
重写func viewDidLoad(){
super.viewDidLoad()
self.locationManager=CLLocationManager()
self.locationManager.delegate=self
self.locationManager.desiredAccuracy=KCallocationAccuracyBest//电池电量耗尽!
self.locationManager.distanceFilter=1
self.locationManager.requestWhenUseAuthorization()
self.locationManager.startUpdatingLocation()
searchUser()
self.dateFormatter.dateStyle=NSDateFormatterStyle.ShortStyle
self.dateFormatter.timeStyle=NSDateFormatterStyle.LongStyle
self.refreshControl=UIRefreshControl()
self.refreshControl.attributeditle=NSAttributedString(字符串:“拉入刷新”)
self.refreshControl.addTarget(self,操作:“刷新:”,forControlEvents:UIControlEvents.ValueChanged)
self.tableView.insertSubview(刷新控件,索引:0)
self.handleRefresh()
}
func刷新(发送方:AnyObject)
{
println(“刷新工作!”)
self.handleRefresh()
}
func handleRefresh(){
如果locationManager.location!=零{
url=NSURL(字符串:”http://www.myURL.com/data.php?lat=\(locationManager.location.coordinate.latitude)&lon=\(locationManager.location.coordinate.longitude)&max=15&when=now“!
}否则{
url=NSURL(字符串:”http://www.myURL.com/data.php?lat=41&lon=11&max=10&when=now")!
}
//println(“调用URL!!”)
var请求:NSMutableURLRequest=NSMutableURLRequest(URL:URL)
request.HTTPMethod=“GET”
request.setValue(“application/json”,forHTTPHeaderField:“Accept”)
var REPORNSERROR:NSError?
var响应:nsurresponse?
//变量urlData:NSData?=NSURLConnection.sendSynchronousRequest(请求、返回响应:&response、错误:&ResponseError)
NSURLConnection.sendAsynchronousRequest(请求,队列:NSOperationQueue.mainQueue(),completionHandler:{
响应、数据、错误
如果(错误!=nil){
回来
}
调度异步(调度获取全局队列(调度队列优先级默认为0)){
var错误:N错误?
self.dati=(NSJSONSerialization.JSONObjectWithData(数据,选项:.MutableContainers,错误:&error)作为!NSDictionary)[“spots”]作为!NSMutableArray
如果(错误!=nil){
回来
}
//****Json解析*****
dispatch\u async(dispatch\u get\u main\u queue()){
self.tableView.reloadData()
self.tableView.delegate=self
self.tableView.dataSource=self
}
}
})
现在让我们=NSDate()
让updateString=“上次更新时间”+self.dateFormatter.stringFromDate(现在)
self.refreshControl.attributeditle=nsattributestring(字符串:updateString)
如果self.refreshControl.refreshing
{
self.refreshControl.endRefreshing()
}
self.tableView?.reloadData()
refreshControl.endRefreshing()
}
func searchUser(){
println(“开始搜索用户”)
self.locationManager.delegate=self
self.locationManager.desiredAccuracy=KCallocationAccuracyBest
self.locationManager.requestAlwaysAuthorization()
self.locationManager.startUpdatingLocation()
}
func locationManager(管理器:CLLocationManager!,didUpdateLocations位置:[AnyObject]!){
println(“启动位置管理器函数”)
self.locationCoordinates=manager.location.coordinate
self.locationManager.stopUpdatengLocation()
println(“***************位置=\(self.location座标.纬度)\(self.location座标.经度)”)
}
覆盖功能视图将出现(动画:Bool){
超级。视图将显示(动画)
self.setNavigationBarItem()
}
重写函数didReceiveMemoryWarning(){
超级。我收到了记忆警告()
}
func tableView(tableView:UITableView,numberofrowsinssection:Int)->Int{
返回arrayOfData.count
}
func tableView(tableView:UITableView,cellForRowAtIndexPath:nsindepath)->UITableView单元格{
让cell:ViewCell=tableView.dequeueReusableCellWithIdentifier(“cell”)作为!ViewCell
cell.backgroundColor=UIColor.whiteColor()
设usr=arrayOfData[indexPath.row]
cell.setCell()
返回单元
}
变量selectedSpot:字符串?=nil
var selectedSpotIndex:Int?=nil
覆盖函数prepareforsgue(segue:UIStoryboardSegue,sender:AnyObject?){
如果segue.identifier==“GoSpotDetails”{
var tabBarC:TabBarController=segue.destinationViewController as!TabBarController
var caseIndex=tableView!.indexPathForSelectedRow()!.row
var selectedCase=self.arrayOfSpotsTemp[caseIndex]
tabBarC.DataDetail=selectedCase
}
}
}
非常感谢。嗯,您的代码需要做很多更改。让我给你一些建议
tableView.addSubview(refreshControl,atIndex:0)
而不是self.tableView.insertSubview(refreshControl)
。查看“添加”和“插入”子视图之间的差异
func populateView()
self.handleRefresh()
替换为self.populateView()
self.refreshControl.addTarget(
self, action: "refresh:", forControlEvents: UIControlEvents.ValueChanged
)
与
self.refreshControl.addTarget(
self, action: "handleRefresh:", forControlEvents: UIControlEvents.ValueChanged
)
lazy var refreshControl: UIRefreshControl = {
let refreshControl = UIRefreshControl()
refreshControl.addTarget(
self, action: "handleRefresh", forControlEvents: .ValueChanged
)
return refreshControl
}()