私は何日もこの問題に悩まされてきたので、誰かが助けてくれると本当に嬉しいです。各セルにいくつかのUILabelsとUIButtonが必要なため、カスタムUITableViewサブクラスを作成し、カスタムUITableViewCellサブクラスも作成した動的UITableViewを作成しようとしています。セルが作成されますが、問題はラベルの値が常にnilであるため、セルが適切に表示されないことです。 これは 、ストーリーボードの外観、および これは プログラムの実行中に表示されるもの。
これが私のUITableViewCellサブクラスです:
import UIKit
class QuestionTableViewCell: UITableViewCell {
@IBOutlet var student: UILabel!
@IBOutlet var labDesk: UILabel!
@IBOutlet var topic: UILabel!
@IBOutlet var answers: UILabel!
}
そして私のUITableViewサブクラス:
import UIKit
class QuestionViewController: UITableViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet var table: UITableView!
struct Question {
var student: String
var labDesk: String
var topic: String
var answered: String
}
override func viewDidLoad() {
super.viewDidLoad()
table.estimatedRowHeight = 50
table.dataSource = self
table.delegate = self
self.table.registerClass(QuestionTableViewCell.self, forCellReuseIdentifier: "cell")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell") as QuestionTableViewCell
cell.student.text = "random string"
cell.labDesk?.text = "25/A"
cell.topic?.text = "string"
cell.answers?.text = "3"
return cell
}
}
self.table.registerClass(QuestionTableViewCell.self, forCellReuseIdentifier: "cell")
を削除してみてください
Nibでセルを使用している場合は、registerNib:forCellReuseIdentifier:
を使用してセルをテーブルビューに登録していることを確認してください。セルにクラスがある場合は、registerClass:forCellReuseIdentifier:
を使用します。
まず、クラスがInterface Builderに存在する場合は、クラスを登録する必要はありません。
次に、dequeueReusableCellWithIdentifier:forIndexPath
の代わりにdequeueReusableCellWithIdentifier
。
第3に、UITableViewController
にはすでにtableView
というプロパティがあるため、UITableViewControllerがすでにこれを処理しているため、table
にIBOutletを作成する必要はありません。また、UITableViewDataSource
およびUITableViewDataSource
にも準拠しているため、これらは無関係です。
4番目に、table
のプロパティを設定しないでください。tableView
のプロパティを設定してください。
5番目、cell.labDesk.text = ""
で十分です。オプションにする必要はありません。
すべてのIBOutletが接続され、セル識別子が正しく設定されていて、これらの修正が行われていれば、機能します。
class QuestionTableViewCell: UITableViewCell {
@IBOutlet var student: UILabel!
@IBOutlet var labDesk: UILabel!
@IBOutlet var topic: UILabel!
@IBOutlet var answers: UILabel!
}
class QuestionViewController: UITableViewController {
struct Question {
var student: String
var labDesk: String
var topic: String
var answered: String
}
override func viewDidLoad() {
super.viewDidLoad()
tableView.estimatedRowHeight = 50
tableView.dataSource = self
tableView.delegate = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell") as QuestionTableViewCell
cell.student.text = "random string"
cell.labDesk.text = "25/A"
cell.topic.text = "string"
cell.answers.text = "3"
return cell
}
}
私はここで遅れるかもしれませんが、私は同じような問題を解決しました。
UITableViewCellのInterfaceBuilderで識別子を設定していることを確認してください。
考えられるすべての解決策を試した後でも、これを理解しようとしている人のために:
ストーリーボードのIBOutletsを切断/再接続するとうまくいきます!
最も重要な部分は、カスタムセルを含むxibをテーブルビューに登録することです。したがって、viewDidLoad()メソッドに次のコードを追加します。
let nib = UINib.init(nibName: "MyCustomCell", bundle: nil)
self.tblUsers.register(nib, forCellReuseIdentifier: "MyCustomCell")
Xibでテーブルセルを使用している場合。セルを..に登録する必要があります。
register(_:forCellReuseIdentifier:)