无法调用 tableView 委托和数据源方法
Not able to call tableView Delegate and DataSource methods
我在不使用故事板的情况下以编程方式设计了 tableView
和 tableViewCell
。我在 ViewController
中的 viewDidLoad()
看起来像这样:
tableView.delegate = self
tableView.dataSource = self
tableView.register(TicketsTableViewCell.self,forCellReuseIdentifier:cellReuseIdentifier)
tableView = UITableView(frame: UIScreen.main.bounds, style: .plain)
self.view.addSubview(tableView)
我的 tableViewCell
看起来像这样:
class TicketsTableViewCell: UITableViewCell {
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
//Other View related stuff
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override func layoutSubviews() {
super.layoutSubviews()
}
问题是,当我 运行 它时,我能够看到 tableView
,但看不到单元格。此外,当我在 cellForRowAt:
处添加断点时,它不会被调用。我做错了什么?我在使用重用标识符时有什么问题吗?
提前致谢。
像这样尝试可能对你有帮助
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource
{
var tableView : UITableView!
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.whiteColor()
self.setUpTableView()
}
func setUpTableView()
{
// Create only one table view.
tableView = UITableView(frame: CGRectMake(self.view.frame.size.width / 10, self.view.frame.size.height / 2, self.view.frame.size.width - self.view.frame.size.width / 5, self.view.frame.size.height / 2 - 20), style: UITableViewStyle.Grouped)
tableView.dataSource = self
tableView.delegate = self
tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
tableView.layer.cornerRadius = 10
tableView.layer.borderColor = UIColor.blackColor().CGColor
tableView.layer.borderWidth = 2
self.view.addSubview(tableView)
}
//table view data source
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 3
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell : UITableViewCell = tableView.dequeueReusableCellWithIdentifier("cell") as! UITableViewCell
cell.textLabel?.text = "test"
cell.textLabel?.numberOfLines = 0
return cell
}
}
问题是首先你设置了 tableView
的 delegate
和 datasource
然后你用第 tableView = UITableView(frame: UIScreen.main.bounds, style: .plain)
行重新初始化 tableView
所以先放那行,然后设置 delegate
和 datasource
并注册单元格。
tableView = UITableView(frame: UIScreen.main.bounds, style: .plain)
tableView.delegate = self
tableView.dataSource = self
tableView.register(TicketsTableViewCell.self, forCellReuseIdentifier: cellReuseIdentifier)
self.view.addSubview(tableView)
我在不使用故事板的情况下以编程方式设计了 tableView
和 tableViewCell
。我在 ViewController
中的 viewDidLoad()
看起来像这样:
tableView.delegate = self
tableView.dataSource = self
tableView.register(TicketsTableViewCell.self,forCellReuseIdentifier:cellReuseIdentifier)
tableView = UITableView(frame: UIScreen.main.bounds, style: .plain)
self.view.addSubview(tableView)
我的 tableViewCell
看起来像这样:
class TicketsTableViewCell: UITableViewCell {
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
//Other View related stuff
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override func layoutSubviews() {
super.layoutSubviews()
}
问题是,当我 运行 它时,我能够看到 tableView
,但看不到单元格。此外,当我在 cellForRowAt:
处添加断点时,它不会被调用。我做错了什么?我在使用重用标识符时有什么问题吗?
提前致谢。
像这样尝试可能对你有帮助
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource
{
var tableView : UITableView!
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.whiteColor()
self.setUpTableView()
}
func setUpTableView()
{
// Create only one table view.
tableView = UITableView(frame: CGRectMake(self.view.frame.size.width / 10, self.view.frame.size.height / 2, self.view.frame.size.width - self.view.frame.size.width / 5, self.view.frame.size.height / 2 - 20), style: UITableViewStyle.Grouped)
tableView.dataSource = self
tableView.delegate = self
tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
tableView.layer.cornerRadius = 10
tableView.layer.borderColor = UIColor.blackColor().CGColor
tableView.layer.borderWidth = 2
self.view.addSubview(tableView)
}
//table view data source
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 3
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell : UITableViewCell = tableView.dequeueReusableCellWithIdentifier("cell") as! UITableViewCell
cell.textLabel?.text = "test"
cell.textLabel?.numberOfLines = 0
return cell
}
}
问题是首先你设置了 tableView
的 delegate
和 datasource
然后你用第 tableView = UITableView(frame: UIScreen.main.bounds, style: .plain)
行重新初始化 tableView
所以先放那行,然后设置 delegate
和 datasource
并注册单元格。
tableView = UITableView(frame: UIScreen.main.bounds, style: .plain)
tableView.delegate = self
tableView.dataSource = self
tableView.register(TicketsTableViewCell.self, forCellReuseIdentifier: cellReuseIdentifier)
self.view.addSubview(tableView)