2016-08-05 6 views
0

Ich bin neu in Swift. Ich versuche, eine benutzerdefinierte Suche Tableview zu machen und eine Prototyp-Zelle in der Storyboard-benutzerdefinierte UITableViewCell - nicht angezeigt

enter image description here

Ich habe benutzerdefinierte Klasse hinzugefügt, die ich in der Inspektor für die Zelle enter image description here

Hier ist es Code:

class SearchTableViewCell: UITableViewCell { 

    @IBOutlet var routeDescriptionLbl: UILabel! 
    @IBOutlet var ivRoute: UIImageView! 
    @IBOutlet var distanceLbl: UILabel! 
    @IBOutlet var routeNumberLbl: UILabel! 


    override func awakeFromNib() { 
    //still empty yet 
     super.awakeFromNib() 

    } 

    override func setSelected(selected: Bool, animated: Bool) { 
     super.setSelected(selected, animated: animated) 

     // Configure the view for the selected state 
    } 
} 

Jetzt machte ich eine Kennung: enter image description here

Und hier die View-Controller für die gesamte Ansicht ist (teilweise):

class SearchViewController: UIViewController, UITableViewDataSource, UITableViewDelegate{ 

    var transportData : [RouteModel] = [] 

    override func viewDidLoad() { 
       super.viewDidLoad() 
     fillMockup() 
     self.lvMain.reloadData() //in case it's needed after mockup is filled 

    } 

    override func didReceiveMemoryWarning() { 

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

    override func viewDidAppear(animated: Bool) { 

     NSLog("viewDidAppear") 
    } 

    func fillMockup(){ 
//just some mockup data to test if it's working 
     transportData.append(RouteModel(type: RouteModel.TYPE_BUS,routeNumber: "44", description: "Ярославль - Сан Тропе",dist: "200 m")) 
     transportData.append(RouteModel(type: RouteModel.TYPE_TRAM,routeNumber: "11", description: "Ярославль - Сан Тропе",dist: "400 m")) 
     transportData.append(RouteModel(type: RouteModel.TYPE_R_BUS,routeNumber: "1", description: "Ярославль Главный - Жопа Мира",dist: "1.4 км")) 
     transportData.append(RouteModel(type: RouteModel.TYPE_TROLLEY,routeNumber: "24", description: "Ярославль - Малые Гребеня",dist: "1.4 км")) 
     transportData.append(RouteModel(type: RouteModel.TYPE_BUS,routeNumber: "43", description: "Ярославль - Малые Гребеня",dist: "1.4 км")) 
     transportData.append(RouteModel(type: RouteModel.TYPE_BUS,routeNumber: "43а", description: "Ярославль - Малые Гребеня",dist: "1.4 км")) 
     transportData.append(RouteModel(type: RouteModel.TYPE_BUS,routeNumber: "85б", description: "Ярославль - Брагино",dist: "1.4 км")) 
     transportData.append(RouteModel(type: RouteModel.TYPE_BUS,routeNumber: "38", description: "Ярославль - Брагино",dist: "2.4 км")) 
    } 

    public func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{ 
     NSLog("transportData.count = \(transportData.count)") 
     return transportData.count 
    } 

    public func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier") as? SearchTableViewCell 
     if let cell = cell { 
      cell.routeNumberLbl.text = transportData[indexPath.row].routeNumber 
      cell.routeDescriptionLbl.text = transportData[indexPath.row].description 
      cell.distanceLbl.text = transportData[indexPath.row].dist 

      return cell 
     } 

     return UITableViewCell() 

    } 

    func tableView(tableView: UITableView, 
        didSelectRowAtIndexPath indexPath: NSIndexPath){ 
     NSLog("You selected cell #\(indexPath.row)!") 
     let position = indexPath.row; 
     tableView.deselectRowAtIndexPath(indexPath, animated: false) 
    } 
} 

nun nicht Log aus der Tabellenansicht aufgerufen wird. Natürlich wird TableView nicht angezeigt

Was ist das Problem?

Antwort

0

tun wie

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

    let cell: SearchTableViewCell = self.tableView.dequeueReusableCellWithIdentifier("reuseIdentifier") as! SearchTableViewCell 

    cell.routeNumberLbl.text = transportData[indexPath.row].routeNumber 
     cell.routeDescriptionLbl.text = transportData[indexPath.row].description 
     cell.distanceLbl.text = transportData[indexPath.row].dist 

    return cell 
} 

aktualisiert Antwort

override func viewDidLoad() { 
       super.viewDidLoad() 
      self.lvMain.delegate = self // invoke data source and delegate on current class 
     self.lvMain.dataSource = self 
     fillMockup() 



    } 

    func fillMockup(){ 
//just some mockup data to test if it's working 
     transportData.append(RouteModel(type: RouteModel.TYPE_BUS,routeNumber: "44", description: "Ярославль - Сан Тропе",dist: "200 m")) 
     transportData.append(RouteModel(type: RouteModel.TYPE_TRAM,routeNumber: "11", description: "Ярославль - Сан Тропе",dist: "400 m")) 
     transportData.append(RouteModel(type: RouteModel.TYPE_R_BUS,routeNumber: "1", description: "Ярославль Главный - Жопа Мира",dist: "1.4 км")) 
     transportData.append(RouteModel(type: RouteModel.TYPE_TROLLEY,routeNumber: "24", description: "Ярославль - Малые Гребеня",dist: "1.4 км")) 
     transportData.append(RouteModel(type: RouteModel.TYPE_BUS,routeNumber: "43", description: "Ярославль - Малые Гребеня",dist: "1.4 км")) 
     transportData.append(RouteModel(type: RouteModel.TYPE_BUS,routeNumber: "43а", description: "Ярославль - Малые Гребеня",dist: "1.4 км")) 
     transportData.append(RouteModel(type: RouteModel.TYPE_BUS,routeNumber: "85б", description: "Ярославль - Брагино",dist: "1.4 км")) 
     transportData.append(RouteModel(type: RouteModel.TYPE_BUS,routeNumber: "38", description: "Ярославль - Брагино",dist: "2.4 км")) 

     self.lvMain.reloadData() //reload the table when does loaded perfectly 
    } 


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

    let cell: SearchTableViewCell = self.tableView.dequeueReusableCellWithIdentifier("reuseIdentifier") as! SearchTableViewCell 

    cell.routeNumberLbl.text = transportData[indexPath.row].routeNumber 
     cell.routeDescriptionLbl.text = transportData[indexPath.row].description 
     cell.distanceLbl.text = transportData[indexPath.row].dist 

    return cell 
} 

für weiteres Beispiel siehe this

+0

Überprüfen Sie die aktualisierte Antwort –

0

Es aufgrund geschieht für Ihr Handy eine neue Instanz immer schaffen, weil es nicht ist wenn ein Teil kommt. So überprüfen Sie, ob Ihre Zelle ist gleich Null dann eine Instanz der Zelle wie folgt erstellen ..

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

    var cell: MyCell! = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier") 

    if cell == nil { 
       tableView.registerNib(UINib(nibName: "MyCell", bundle: nil), forCellReuseIdentifier: "reuseIdentifier") 
       cell =tableView.dequeueReusableCellWithIdentifier(identifier) as? MyCell 
      } 
    return cell 
    } 
} 

Hier MyCell ist die individuelle Zelle.

1

hinzufügen Zwei Linie innerhalb viewDidLoad() Funktion

self.yourtableviewname.delegate = self 
self.yourtableviewname.dataSource = self 
0

können Sie überprüfen, ob Sie von unten zwei Schritten, etwas zu tun vergessen

1) Kreuz Überprüfen Sie, ob Sie angeschlossen haben Datenquelle, Delegierter und IBOutlet Für Tabellenansicht ?

2) Überprüfen Sie, ob Sie den Bezeichner in Storyboard auf selbe wie reuseIdentifier gesetzt haben?