2016-08-05 4 views
0

Я новичок в Swift. Я пытаюсь сделать пользовательские глядя TableView и добавил клетку-прототип в раскадровкепользовательский UITableViewCell - не отображается

enter image description here

Я сделал пользовательский класс, который я добавил в инспекторе для клетки enter image description here

Вот его код:

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 
    } 
} 

Теперь я сделал идентификатор: enter image description here

И вот View Controller для всей точки зрения (частично):

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) 
    } 
} 

Теперь, не какой-либо из журнала табличных вызываются. Разумеется, TableView не отображается

В чем проблема?

ответ

0

сделать как

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 
} 

обновленного ответ

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 
} 

для дополнительного примера см this

+0

проверить обновленный ответ –

0

Это происходит из-за вашу ячейку всегда создает новый экземпляр, потому что это не приход в если часть. Поэтому проверьте, если ваша клетка равна нулю, то создать экземпляр вашей ячейки, как это ..

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 
    } 
} 

Здесь MyCell обычай клетки.

1

Добавить Двустрочный внутри viewDidLoad() функция

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

Вы можете проверить забыли ли вы сделать что-нибудь из ниже двух шагов

1) Крест Проверьте, подключен ли Datasource, делегат и IBOutlet Для настольный?

2) Проверьте, установлен ли идентификатор в Storyboard, такой же, как reuseIdentifier?

Смежные вопросы