为什么我的情节提要中的图标不再显示?

时间:2019-06-11 09:31:17

标签: ios swift

我制作了一个带有几行的幻灯片菜单,每行都有一个我在情节提要中设置的图标。

enter image description here

我的图标不再显示在应用程序中。我尝试添加一些闭包,并使用特定的图像,高度和宽度设置图像,然后以我的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)
}}

图标应如上图所示显示。

2 个答案:

答案 0 :(得分:2)

在您的cellForRowAt方法中,您每次都在创建新的单元格,而不是重用单元格。请参阅以下代码行:

let cell = UITableViewCell(style: .default, reuseIdentifier: "Cell")

您应该使用以下代码更改上面的代码行:

let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)

我希望这能解决您的问题。

答案 1 :(得分:2)

在情节提要中选择MenuViewController的表格视图,并将其类型更改为“静态单元格”

enter image description here

然后从代码中删除numberOfSectionsnumberOfRowsInSectioncellForRowAt indexPath方法。仅在您的代码中保留didSelectRowAt indexPath方法。