2016-04-20 5 views
0

Ich versuche, eine Tabellenansicht einzurichten und ich laufe immer in Probleme, nicht die erfahrensten mit ihnen so etwas Hilfe wäre toll, heres das Storyboard view und hier ist mein Code für die verlinkt view-ControllerOutlets und UITableView Problem

// 
// UpgradesTest.swift 
// myProject 
// 
// Created by fgstu on 4/19/16. 
// Copyright © 2016 AllenH. All rights reserved. 
// 


import UIKit 

class UpgradesTest: UIViewController, UITableViewDelegate, UITableViewDataSource { 

@IBOutlet weak var tableView: UITableView! 

@IBOutlet var shopButton: UIButton! 

@IBOutlet weak var shopLabel: UILabel! 


var shopData: [MyData] = [] 


override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 
    tableView.dataSource = self 
    tableView.delegate = self 

    shopData = [ 
     MyData(shopItemData: "Item 1", shopItemPrice: 1), 
     MyData(shopItemData: "Item 2", shopItemPrice: 2), 
     MyData(shopItemData: "Item 3", shopItemPrice: 3) 
    ] 
} 

struct MyData { 
    var shopItemData:String 
    var shopItemPrice:Int 
} 

func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) { 
    print(shopData[indexPath.row]) 
} 

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

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("Shop", forIndexPath: indexPath) 

    cell.textLabel?.text = shopData[indexPath.row].shopItemData 

    cell.shopLabel.text = shopData[indexPath.row].shopItemData 

    cell.shopButton.label = shopData[indexPath.row].shopItemPrice 

    return cell 
} 



} 

Die 4 Fehler sind:

Wert vom Typ 'UITableViewCell' wie kein Mitglied 'shopLabel'
Wert vom Typ 'UITableViewCell' wie kein Mitglied ‚shopButt auf '
der shopLabel Steckdose von den upgradesTest auf die UILabel ist ungültig. Outlets können nicht mit sich wiederholenden Inhalten verbunden werden. Der ShopButton Ausgang von der upgradesTest auf die UILabel ist ungültig. Outlets können nicht mit verbunden werden, um Inhalte zu wiederholen.

und im Code meiner

cell.shopLabel.text = shopData[indexPath.row].shopItemData 

cell.shopButton.label = shopData[indexPath.row].shopItemPrice 

Linien funktionieren nicht, jede mögliche Hilfe?

+0

Ihre Steckdosen (shopButton und shopLabel) sind nicht auf Ihrer Zelle, sie sind auf Ihrer UIViewController-Unterklasse. Sie benötigen eine benutzerdefinierte Zellenunterklasse, wenn Sie solche Subviews hinzufügen möchten. Wie es aussieht, haben Sie diese Eigenschaften an die falsche Stelle gesetzt. – Dare

+0

die Steckdosen repariert, was wäre die richtige Codezeile, um den Text auf dem shopLabel damit in der benutzerdefinierten Zelle namens "Shop" zu ändern –

+0

Ihre benutzerdefinierte Zelle muss mit einer Wiederverwendungskennung registriert werden, und Sie müssen die Rückgabe umwandeln Wert von dequeueReusableCellWithIdentifier() als die entsprechende Klasse in CellForRowAtIndexPath. Ohne diese Schritte handeln Sie weiterhin auf einer Instanz einer UITableViewCell, die diese Eigenschaften nicht aufweist. Ich würde auf jeden Fall einen Schritt zurückgehen und die Erbschaft lesen, bevor ich von diesem Punkt aus fortfahre. – Dare

Antwort

0

Ihnen fehlt ein Schlüsselkonzept. Wenn Sie Zellen in einer Tabelle haben und Ihrer Zelle eigene Beschriftungen und Felder hinzufügen, müssen Sie eine neue Klasse erstellen, die von UITableViewCell abgeleitet ist. Klicken Sie anschließend im Storyboard auf die Zelle und verwenden Sie die Registerkarte "Identity Inspector", um anzugeben, dass diese neue Klasse anstelle der Standardklasse verwendet werden muss.

Verbinden Sie die Ausgänge mit der Zelle, nicht die Ansicht.

class MyCell : UITableViewCell { 
    // put outlets here 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("Shop",  forIndexPath: indexPath) as! MyCell 

    cell.textLabel?.text = shopData[indexPath.row].shopItemData 
    cell.shopLabel.text = shopData[indexPath.row].shopItemData 
    cell.shopButton.label = shopData[indexPath.row].shopItemPrice 

    return cell 
} 
+0

das hat funktioniert! danke c:, auch sein shopButton.setTitle nicht shopButton.label für jeden, der diese Ressource verwendet –

+0

Ich denke shopButton.title = "einige Zeichenfolge" funktioniert auch. Versuch es. – ryantxr

Verwandte Themen