静态tableView仅在选择行时更新

时间:2015-07-19 06:15:29

标签: uitableview static reloaddata

我有一个UITableViewController,它包含一个静态UITableView,您可以从中请求报价并买入或卖出股票。我在一个单独的ServerCommunicator类中处理与后端的所有通信。当请求完成时,ServerCommunicator会调用委托(tableViewController)来更新tableView中的字段。

在主队列中,我调用tableView.reloadData并显示字段。

问题是字段会立即显示但显示过时的值。但是,当我通过单击选择一行时,值会更新。

我做错了什么?

class AddStockTableViewController: UITableViewController, ServerCommunicatorDelegate {

………..

override func viewDidLoad() {
    super.viewDidLoad()
    nameLabel.hidden = true
    symbolLabel.hidden = true
    quoteLabel.hidden = true
    changeLabel.hidden = true
     ….….   

}

@IBAction func getQuoteAction(sender: UIButton) {

    if let symbol = getQuoteTextField.text {
        serverCommunicator.updateQuote(symbol, delegate: self)
    }
}

func didCompleteRequest(data : NSData)
{
    quote = parseQuote(data)

    self.symbolLabel.text = "(\(self.quote.symbol))"
    self.nameLabel.text = self.quote.name
    self.quoteLabel.text = "\(self.quote.currentPrice)"
    self.changeLabel.text = “\(self.quote.change)"

    ……. 


    dispatch_async(dispatch_get_main_queue(), {

        self.tableView.reloadData()
        self.nameLabel.hidden = false
        self.symbolLabel.hidden = false
        self.quoteLabel.hidden = false
        ………
     }

   }


class ServerCommunicator
{
    func sendRequest(requestURL : String, requestString : String, delegate : ServerCommunicatorDelegate)
    {
       if let requestData = requestString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false){
          let request = NSMutableURLRequest(URL: NSURL(string: requestURL)!)
          request.HTTPMethod = "POST"

          let urlSession = NSURLSession.sharedSession()
          let task = urlSession.uploadTaskWithRequest(request, fromData: requestData, completionHandler: {(data, response, error) -> Void in

            if error != nil {
                println(error.localizedDescription)
            }
            else {
                delegate.didCompleteRequest(data)
            }
        })
        task.resume()

    } else {
        print("Could not encode requestString to data")
    }
  }
 …….
}   

1 个答案:

答案 0 :(得分:0)

没有 静态TableView更新之类的东西。所有更新都应该通过单元格更改进行,并且这种更改应由某种表视图或表视图单元格刷新触发。

未在UITableViewCell中显示的更新表明该单元格已缓存且未重新加载新数据。

reloadData中的

UITableView触发器重新加载所有表格视图单元格。确保cellForRowAtIndexPath返回新数据,dequeueReusableCellWithIdentifier使用正确的ID。

最后,如果更改单个单元格,则重新加载所有单元格不是最佳实践。 Is it possible to refresh a single UITableViewCell in a UITableView?是的。