自定义UITableViewCell - 不显示
问题描述:
我是新来的Swift。 我试图做一个定制寻找的TableView和故事板自定义UITableViewCell - 不显示
这是代码自定义类:
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
}
}
而这里的视图控制器整个视图(部分):
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没有显示
什么问题?
答
不喜欢
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
答
这是由于,因为它不是你的始终是创建一个新的实例发生进来如果部分。所以,检查你的电池是零,然后创建你的电池的情况下这样的..
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是自定义单元格。
答
添加两线内viewDidLoad()
功能
self.yourtableviewname.delegate = self
self.yourtableviewname.dataSource = self
答
您可以检查您是否忘了做从下面两个步骤什么
1)交叉检查是否已连接数据源,代表和IBOutlet中对于tableview?
2)检查Storyboard中设置的标识符是否与reuseIdentifier相同?
检查更新的答案 –