我是iOS开发的新手,我正在制作一个像许多应用程序一样的左侧菜单栏。我得到了一点,但现在我被卡住了。请帮忙。
我有一个名为LeftMenu的类,它声明如下:
类LeftMenu:UIView,UITableViewDelegate,UITableViewDataSource {
原因是我在多个UIViewControllers中使用相同的LeftMenu
有一个表示scrollMenu的tableView,我正在观察所选的行:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
switch self.menuItems[indexPath.row] {
case "Wever":
print(self.menuItems[indexPath.row])
case "Payments":
print(self.menuItems[indexPath.row])
case "Profile":
print(self.menuItems[indexPath.row])
case "Trip History":
print(self.menuItems[indexPath.row])
case "Referral":
print(self.menuItems[indexPath.row])
case "Help":
print(self.menuItems[indexPath.row])
case "Settings":
print(self.menuItems[indexPath.row])
case "About":
print(self.menuItems[indexPath.row])
default:
break
}
}
我使用LeftMenu在每个视图控制器中调出菜单。
我想要做的是在选择tableView中的单元格时打开相应的视图控制器。请帮忙。
答案 0 :(得分:2)
您可以为LeftMenu视图创建委托协议,并让任何显示LeftMenu的视图控制器实现该协议,因此他们负责推送新的视图控制器。
在LeftMenu.swift中
protocol LeftMenuDelegate: class {
func leftMenuDidSelectViewController(_ viewController: UIViewController)
}
class LeftMenu: UIView, UITableViewDelegate, UITableViewDataSource {
public weak var delegate: LeftMenuDelegate?
...
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
switch self.menuItems[indexPath.row] {
case "Wever":
let viewController = WeverViewController() // or whatever it is named
self.delegate?.leftMenuDidSelectViewController(viewController)
...
}
}
...
}
然后在显示LeftMenu的所有视图控制器中:
class SomeViewController: UIViewController, LeftMenuDelegate {
...
// wherever you create you left menu, do this
let leftMenu = LeftMenu()
leftMenu.delegate = self
...
// Add this method to be called from LeftMenu through the delegate protocol
func leftMenuDidSelectViewController(_ viewController: UIViewController) {
self.navigationController?.pushViewController(viewController, animated: true)
}
您可以为包含LeftMenu视图的所有视图控制器创建一个基类,这样您就不必多次执行此实现。