2015-05-02 40 views
0

我一直試圖在應用程序啓動時顯示UIActivityIndicatorView,直到JSON完成從網站獲取數據並隱藏它(indicatorView)。 但我仍然無法弄清楚!我正在使用UITableView來顯示下載的數據。在Swift中顯示帶有JSON的UIActivityIndi​​catorView

let kivaLoadURL = "http://api.kivaws.org/v1/loans/newest.json" 
    var loans = [Loan]() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     getLatestLoans() 

    } 

func getLatestLoans() { 
     let request = NSURLRequest(URL: NSURL(string: kivaLoadURL)!) 
     let urlSession = NSURLSession.sharedSession() 
     let task = urlSession.dataTaskWithRequest(request, completionHandler: { (data, response, error) -> Void in 

      if error != nil { 
       println(error.localizedDescription) 
      } 

      self.loans = self.parseJsonData(data) 

      dispatch_async(dispatch_get_main_queue(), { 
       self.tableView.reloadData() 
      }) 

     }) 

     task.resume() 
    } 

    func parseJsonData(data: NSData) -> [Loan] { 
     var loans = [Loan]() 
     var error:NSError? 

     let jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &error) as? NSDictionary 

     if error != nil { 
      println(error?.localizedDescription) 
     } 

     let jsonLoans = jsonResult?["loans"] as! [AnyObject] 
     for jsonLoan in jsonLoans { 
      let loan = Loan() 
      loan.name = jsonLoan["name"] as! String 
      loan.amount = jsonLoan["loan_amount"] as! Int 
      loan.use = jsonLoan["use"] as! String 

      let location = jsonLoan["location"] as! [String:AnyObject] 
      loan.country = location["country"] as! String 

      loans.append(loan) 
      println("\(loan.name), \(loan.amount), \(loan.use), \(loan.country)") 
     } 

     return loans 
    } 

我用這個下面的代碼顯示的指標,我想self.tableView.reloadData()後寫入停止動畫指示或隱藏警報,但它沒有工作,這裏是代碼:

var alert: UIAlertView = UIAlertView(title: "Title", message: "Please wait...", delegate: nil, cancelButtonTitle: "Cancel"); 
var loadingIndicator: UIActivityIndicatorView = UIActivityIndicatorView(frame: CGRectMake(50, 10, 37, 37)) as UIActivityIndicatorView 
loadingIndicator.center = self.view.center; 
loadingIndicator.hidesWhenStopped = true 
loadingIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray 
loadingIndicator.startAnimating(); 

alert.setValue(loadingIndicator, forKey: "accessoryView") 
loadingIndicator.startAnimating() 
alert.show(); 
+0

你想在UITableView中顯示數據還是不顯示它? –

+0

問題是當Json獲取數據並在數據準備就緒時隱藏指標時顯示指標,我已將數據加載到tableview中,但只是顯示指標。 – AaoIi

+0

在'viewDidLoad'方法中創建並添加'UIActivityIndi​​catorViewStyle',並在'parseJsonData'方法中重載tableview的數據後從超級視圖中移除它 –

回答

1

定義在上面像變量,

var categories = [String:String]() 
var alert: UIAlertView = UIAlertView() 
let kivaLoadURL = "http://api.kivaws.org/v1/loans/newest.json" 

初始化它要在其中添加像

var loadingIndicator: UIActivityIndicatorView = UIActivityIndicatorView(frame: CGRectMake(50, 10, 37, 37)) as UIActivityIndicatorView 
loadingIndicator.center = self.view.center; 
loadingIndicator.hidesWhenStopped = true 
loadingIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray 
    loadingIndicator.startAnimating() 

alert = UIAlertView(title: "Title", message: "Please wait...", delegate: nil, cancelButtonTitle: "Cancel") 
alert.addSubview(loadingIndicator); 
alert.show() 

只需添加一行躲警報之前return loan

func parseJsonData(data: NSData) -> [Loan] { 
    .... 
    alert.dismissWithClickedButtonIndex(0, animated: false) 
    return loans 
} 

試試這個,可以幫助你。

相關問題