我是 iOS 开发的新手,我正在制作一个像许多应用程序一样的左侧菜单栏。我到了一个地步,但现在我被困住了。请帮忙。
我有一个名为 LeftMenu 的类,声明如下:
LeftMenu 类:UIView、UITableViewDelegate、UITableViewDataSource {
原因是我在多个 UIViewController 中使用相同的 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 在每个 View Controller 中调出菜单。
我想做的是当 tableView 中的一个单元格被选中时打开相应的 View Controller 。请帮忙。
最佳答案
您可以为 LeftMenu View 创建一个委托(delegate)协议(protocol),并让任何显示 LeftMenu 的 View Controller 实现该协议(protocol),这样它们就负责推送新的 View Controller 。
在 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 的 View Controller 中:
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 View 的 View Controller 执行此操作,因此您不必多次执行此实现。
关于ios - 如何从 UIView 推送 UIViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47176628/