我制作了一个带有几行的幻灯片菜单,每行都有一个我在情节提要中设置的图标。
我的图标不再显示在应用程序中。我尝试添加一些闭包,并使用特定的图像,高度和宽度设置图像,然后以我的tableView(_:cellForRowAt:)
方法返回它们。但是图标显示不正确。
如何修改下面显示的代码,以便我的图标正确显示?
enum MenuType: Int, CaseIterable, CustomStringConvertible {
case plan, documentation, visitlist, document, constructdiary, plancorrection
case sync, settings, info
var section: Int {
switch self {
case .plan, .documentation, .visitlist, .document, . constructdiary, .plancorrection: return 0
case .sync, .settings, .info: return 1
}
}
var row: Int? {
switch self.section {
case 0: return self.rawValue
case 1: return self.rawValue - MenuType.allCases.filter{ $0.section < self.section }.count
default: return nil
}
}
var description: String {
switch self {
case .plan:
return "Pläne"
case .documentation:
return "Dokumentationen"
case .visitlist:
return "Begehungen"
case .document:
return "Dokument"
case .constructdiary:
return "Bautagesberichte"
case .plancorrection:
return "Plankorrekturen"
case .sync:
return "Synchronisation"
case .settings:
return "Einstellungen"
case .info:
return "Info"
}
} }
class MenuViewController: UITableViewController {
@IBOutlet weak var imageView: UIImageView!
var didTapMenuType: ((MenuType) -> Void)?
override func viewDidLoad() {
super.viewDidLoad()
setupImageView()
}
override func numberOfSections(in tableView: UITableView) -> Int {
return Array(Set(MenuType.allCases.map{ $0.section })).count
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return MenuType.allCases.filter{ $0.section == section }.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: .default, reuseIdentifier: "Cell")
let type = MenuType.allCases.first(where: { $0.section == indexPath.section && $0.row == indexPath.row })
cell.textLabel?.text = type?.description
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
guard let menuType = MenuType.allCases.first(where: { $0.section == indexPath.section && $0.row == indexPath.row }) else {return}
dismiss(animated: true) { [weak self] in
self?.didTapMenuType?(menuType)
}
}
private func setupImageView() {
imageView.frame = CGRect(x: 0, y: 0, width: 35, height: 35)
}}
图标应如上图所示显示。
答案 0 :(得分:2)
在您的cellForRowAt
方法中,您每次都在创建新的单元格,而不是重用单元格。请参阅以下代码行:
let cell = UITableViewCell(style: .default, reuseIdentifier: "Cell")
您应该使用以下代码更改上面的代码行:
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
我希望这能解决您的问题。
答案 1 :(得分:2)