2016-07-01 15 views
0

Mit dem folgenden Tutorial habe ich versucht, einige Bestandsinformationen anzuzeigen, die in einer Tabelle auffüllen würden. Ich habe sowohl den Tabellenansicht-Controller als auch die Tabellenansichtszelle und die verknüpfte stockTableViewCell mit der Tabellenansichtszelle erstellt. Ich bin jedoch nicht in der Lage, die Tabellenansicht auf dem Haupt Storyboard mit dem benutzerdefinierten Tabellenansicht-Controller zu verknüpfen.Swift - Tabellenansicht füllt sich nicht mit Daten, zeigt aber keine Fehler

Grundsätzlich ist jedes Mal, wenn ich versuche, es in das Feld benutzerdefinierte Klasse geben Sie es nicht und gilt, wenn ich navigieren weg verschwindet es

Meine Frage ist, gibt es etwas falsch mit meiner Ansicht-Controller oder Tabellenansicht Zelle oder ist Gibt es etwas in meinem Storyboard, das ich falsch konfiguriert habe?

Tutorial: https://developer.apple.com/library/ios/referencelibrary/GettingStarted/DevelopiOSAppsSwift/Lesson7.html

Tabelle View Controller

import UIKit 

class stocksTableViewController: UITableViewController{ 

    // Mark: Properties 

    var stocks = [stockData]() 
    let stock = stockinfo() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     loadSampleStockData() 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func loadSampleStockData() { 

     var stock1: stockData = stockData(name: "", askPrice: "", percentageChange: "", stockTicker: "") 
     var stock2: stockData = stockData(name: "", askPrice: "", percentageChange: "", stockTicker: "") 
     var stock3: stockData = stockData(name: "", askPrice: "", percentageChange: "", stockTicker: "") 

     stock.getInfo("FB") {(name, price, change) in dispatch_async(dispatch_get_main_queue(),{ 
      stock1 = stockData(name: name, askPrice: price, percentageChange: change, stockTicker: "FB")}) 
     } 

     stock.getInfo("MSFT") {(name, price, change) in dispatch_async(dispatch_get_main_queue(),{ 
      stock2 = stockData(name: name, askPrice: price, percentageChange: change, stockTicker: "MSFT")}) 
     } 

     stock.getInfo("APPL") {(name, price, change) in dispatch_async(dispatch_get_main_queue(),{ 
      stock3 = stockData(name: name, askPrice: price, percentageChange: change, stockTicker: "APPL")}) 
     } 

     stocks += [stock1, stock2, stock3] 
    } 

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return 1 
    } 

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return stocks.count 
    } 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

     let cellIdentifier = "stockViewCell" 

     let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! stockTableViewCell 

     let stock = stocks[indexPath.row] 

     cell.stockName.text = stock.name 
     cell.stockPercentage.text = stock.percentageChange 
     cell.stockDollarChange.text = stock.askPrice 
     cell.stockTicker.text = stock.stockTicker 

     return cell 
    } 
} 

Tabellenansicht Handy

import Foundation 
import UIKit 

class stockTableViewCell: UITableViewCell { 

    // Properties 

    @IBOutlet weak var stockTicker: UILabel! 
    @IBOutlet weak var stockPercentage: UILabel! 
    @IBOutlet weak var stockName: UILabel! 
    @IBOutlet weak var stockDollarChange: UILabel! 

    override func awakeFromNib() { 
     super.awakeFromNib() 
     // Initialization Code 
    } 

    override func setSelected(selected: Bool, animated: Bool) { 
     super.setSelected(selected, animated: animated) 
     // Configure the view for the selected state 
    } 
} 
+0

Wo nennt man 'tableView.reloadData()'? – vadian

+0

Beziehen Sie sich auf die loadSampleStockData(), rief ich das in der Funktion viewDidLoad(), oder ist das nicht, was Sie fragen? –

+0

Ich beziehe mich auf den obigen Code. – vadian

Antwort

0

nicht sicher, was Sie, ohne auf Ihr Projekt haben Probleme, aber was wollen Sie in die benutzerdefinierte Klasse eingeben? Sie sollten stocksTableViewController eingeben und es sollte funktionieren, es sei denn, Sie haben nicht einen TableViewController in Ihr Storyboard gezogen. Und du musst deine Zelle nicht in der viewDidLoad registrieren, um diesen Kommentar zu ignorieren.

Hier verwenden Sie diesen aktualisierten Code, Sie versuchen, zwei Arten von View-Controllern zu einer Ansicht auf Ihrem Storyboard setzen Sie diesen Code in Ihre Klasse DashboardViewController und dies sollte Sie auf dem richtigen Weg zu bekommen, vergessen Sie nicht zu verbinden Der Ausgang für die Eigenschaft "TableView" in diesem Code, wenn Sie ihn implementieren.

class dashboardViewController: DefaultViewController,  UITableViewDataSource, UITableViewDelegate { 

    @IBOutlet weak var tableView: UITableView! 
    @IBOutlet weak var balanceLabel: UILabel! 

    var stocks = [stockData]() 
    let stock = stockinfo() 

     override func viewDidLoad() { 
    super.viewDidLoad() 
    tableView.delegate = self 
    tableView.dataSource = self 
    loadSampleStockData() 
    user.newUser() // Move to login function when login and registration is implemented 

//Sets the Balance Label on Dashboard 
balanceLabel.text = "$" + String(format: "%.2f", user.getBalance()) 
    } 

func loadSampleStockData() { 

var stock1: stockData = stockData(name: "", askPrice: "", percentageChange: "", stockTicker: "") 
var stock2: stockData = stockData(name: "", askPrice: "", percentageChange: "", stockTicker: "") 
var stock3: stockData = stockData(name: "", askPrice: "", percentageChange: "", stockTicker: "") 

stock.getInfo("FB") {(name, price, change) in dispatch_async(dispatch_get_main_queue(),{ 
    stock1 = stockData(name: name, askPrice: price, percentageChange: change, stockTicker: "FB")}) 
    } 

stock.getInfo("MSFT") {(name, price, change) in dispatch_async(dispatch_get_main_queue(),{ 
    stock2 = stockData(name: name, askPrice: price, percentageChange: change, stockTicker: "MSFT")}) 
} 

stock.getInfo("APPL") {(name, price, change) in dispatch_async(dispatch_get_main_queue(),{ 
    stock3 = stockData(name: name, askPrice: price, percentageChange: change, stockTicker: "APPL")}) 
} 

stocks += [stock1, stock2, stock3] 
    } 

    func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
return 1 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return stocks.count 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

let cellIdentifier = "stockViewCell" 

let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! stockTableViewCell 

let stock = stocks[indexPath.row] 

cell.stockName.text = stock.name 
cell.stockPercentage.text = stock.percentageChange 
cell.stockDollarChange.text = stock.askPrice 
cell.stockTicker.text = stock.stockTicker 

return cell 
    }` 
    } 
+0

Welchen TableView möchten Sie füllen? Der auf dem Dashboard? Portfolio? AddStock oder Bestenliste? Alle diese Ansichten sind ViewControllers, sodass Ihr UITableViewController nicht in den benutzerdefinierten Klassenabschnitt passt. – zsteed

+0

Ich versuche, es in das Dashboard zu füllen. Oh, ich sehe, das macht Sinn. Wie würde ich es beheben? Vielen Dank zsteed, ich bin neu in der iOS Entwicklung und lerne immer noch die Grundlagen. Ps. Die Art, wie ich Views und View-Controller verwende, ist richtig? –

+0

Siehe aktualisierten Code sollte Sie auf den richtigen Weg – zsteed

1

Sie müssen eigentlich Ihre customtableviewcell in viewDidLoad()

F registrieren eitere können Sie auch überprüfen Sie den folgenden Link

http://www.mysamplecode.com/2013/06/ios-custom-uitableviewcell-example.html

+0

Danke! Da ich noch ziemlich neu in der Entwicklung bin, lese ich den Link, den du zur Verfügung gestellt hast, aber ich bin immer noch ein bisschen verloren, wie ich meine customtableviewcell in der viewDidLoad() meines View-Controllers registrieren würde. Vielen Dank für deine Hilfe! –

+0

Ich habe versucht, mit diesem: tableView.registerClass (stockTableViewCell, forCellReuseIdentifier: "stockViewCell"), um die Klasse zu registrieren, aber ich versuche immer noch herauszufinden, wie genau dieser Aufruf zu verwenden ist, da ich gerade einen Fehler erhalte. –

+0

Bitte überprüfen Sie den Beispielcode, dass der Link zeigt @ MarkGong-Guy –

0

sah ich Ihr Projekt und ich habe einige Punkte, die Ihnen helfen können:

  1. Sie das Ventil für Ihr Suchfeld nicht haben. Sie haben den UISearchDisplayController eingefügt, aber nicht mit Ihrer Klasse AddStockViewController verbunden.
  2. und am wichtigsten UISearchDisplayerController ist veraltet versuchen, den UISearchController oder UISearchBar zu verwenden.

o/

+0

Awesome Dank so viel, ich werde auf jeden Fall diese Änderungen vornehmen. Ich schätze es, wenn Sie mein Projekt anschauen und mir Feedback geben! –

+0

Kein Problem Mann =) – GeraldoBastos