異なるUI要素をプログラムで作成する方法を学習しようとしています。私は、私たちが持っている一方で2つの.swiftファイル、..セクションヘッダーがプログラムによるUITableViewに表示されない
struct SettingsView {
let settingsCustomTable: UITableView = {
let aTable = UITableView()
aTable.sectionHeaderHeight = 42
aTable.tableFooterView = UITableViewHeaderFooterView(frame:CGRect(x:0,
y:0,
width:aTable.frame.width,
height:0))
aTable.register(SettingsCustomHeader.self, forHeaderFooterViewReuseIdentifier:"customHeader")
aTable.register(SettingsCustomCell.self, forCellReuseIdentifier:"customCell")
return aTable
}()
}
////////////////////////////////
// custom cell class below //
////////////////////////////////
private class SettingsCustomCell: UITableViewCell {
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
contentView.addSubview(customCellLabel)
customCellLabel.frame = CGRect(x:16,
y:0,
width: self.frame.width,
height:self.frame.height)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private let customCellLabel: UILabel = {
let aLabel = UILabel()
aLabel.text = "custom label"
aLabel.textColor = appGreenColor(alphaIs: 1)
return aLabel
}()
}
//////////////////////////////////
// custom header class below //
//////////////////////////////////
private class SettingsCustomHeader: UITableViewHeaderFooterView {
override init(reuseIdentifier: String?) {
super.init(reuseIdentifier: reuseIdentifier)
contentView.addSubview(customHeaderLabel)
customHeaderLabel.frame = CGRect(x:0,
y:0,
width: self.frame.width,
height:self.frame.height)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private let customHeaderLabel: UILabel = {
let aLabel = UILabel()
aLabel.text = "custom header"
aLabel.textColor = UIColor.white
aLabel.backgroundColor = UIColor.red
return aLabel
}()
}
およびその他の.swiftファイル上を持っている...
を私のUITableViewと次のような問題に直面しています私は、コントローラを持っています
class SettingsVC: UIViewController, UITableViewDelegate, UITableViewDataSource {
private let instanceOfSettingsView = SettingsView()
override func loadView() {
super.loadView()
instanceOfSettingsView.settingsCustomTable.delegate = self
instanceOfSettingsView.settingsCustomTable.dataSource = self
view.addSubview(instanceOfSettingsView.settingsCustomTable)
instanceOfSettingsView.settingsCustomTable.frame = CGRect(x: 0,
y: 0,
width: self.view.frame.width,
height: self.view.frame.height)
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 2
}
func numberOfSections(in tableView: UITableView) -> Int {
return 2
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
return tableView.dequeueReusableCell(withIdentifier: "customCell", for: indexPath)
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
return tableView.dequeueReusableHeaderFooterView(withIdentifier: "customHeader")
}
ご覧のとおり、私はセルとヘッダーセクションの両方に全く同じアプローチを使用しています。しかし、何らかの奇妙な理由で、私は以下の出力を得る(このポストの最後のスクリーンショットを確認してください) ..
私は何が紛失しているとアドバイスできますか?私は自分のビューを私のコントローラとは別に置いてみようとしていますが、それはその小さな部分を除いて成功しています。
ご協力いただきありがとうございます。
'tableView.dequeueReusableHeaderFooterView'ので
は、ビジュアルフォーマット言語を使用して、この答えは...を "記入" します間違いなくnullを返す – zombie
@Gamal Elsayedはあなたの質問に関連していませんが、フレームの使用は避けてください。 –
@ TusharSharma、ありがとう、あなたのコメントは、ソリューションの方向性の一歩でした。 –