我制作了具有不同菜单类型和部分的侧面菜单。因此,我创建了一个UIViewController以在UITableViewController之外显示我的静态表视图。我基于LukeSideWalker的this答案创建了UIView。我还将UIViewController分配给了MenuViewController。
enum MenuType: Int, CaseIterable {
case pläne, dokumentationen, begehungen, dokumente
case sync, einstellungen
var section: Int {
switch self {
case .pläne, .dokumentationen, .begehungen, .dokumente : return 0
case .sync, .einstellungen: 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
}
}
}
class MenuViewController: UIViewController, UITableViewDelegate {
@IBOutlet weak var appversion: UILabel!
@IBOutlet weak var currentuser: UILabel!
@IBOutlet weak var orga: UILabel!
var didTapMenuType: ((MenuType) -> Void)?
@IBOutlet weak var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
setupNavbarImage()
setupAppInfo()
}
//selects the correct section with the respective rows
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 setupAppInfo() {
appversion.text = "Version: \(GlobalState.appVersion!)"
currentuser.text = "User: \(GlobalState.user)"
orga.text = "Orga: \(GlobalState.orga)"
}
private func setupNavbarImage() {
imageView.image = UIImage(named: "Logo")
}
}
此代码片段在使用UITableViewController时较早起作用,但是我需要使用ViewController !!我的ContainerView中的部分正确显示,但未显示单元格。
更新
这是我的故事板
tableView还没有。您需要添加
let tableView: UITableView = UITableView()
MenuViewController也应符合UITableViewDataSource。所以:
class MenuViewController: UIViewController, UITableViewDelegate, UITableViewDataSource
添加必要的协议后,还应该添加:
tableView.dataSource = self
tableView.delegate = self
in viewDidLoad