[英]How to push a UIViewController from a UIView
我是iOS開發的新手,並且正在像許多應用程序一樣制作一個左菜單欄。 我說到了要點,但現在我被困住了。 請幫忙。
我有一個名為LeftMenu的類,它聲明如下:
類LeftMenu:UIView,UITableViewDelegate,UITableViewDataSource {
原因是我在多個UIViewControllers中使用相同的LeftMenu
有一個tableView代表scrollMenu,我正在觀察選定的行,如下所示:
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中的一個單元格被選中時打開相應的視圖控制器。 請幫忙。
您可以為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視圖的視圖控制器執行此操作,因此您不必多次執行此實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.