我正在使用一個名為“SideMenu”的 pod,它使用 tableView 創建一個選單。該選單嵌入在我的 ViewController 中,但它無法訪問 ViewController 的功能。當我點擊選單中的一行時,我希望它轉到正確的螢屏。不幸的是,segues 源自 ViewController 而不是 Menu。我顯然不能使用 Delegate,因為我從不使用 tableView - 它是嵌入的。我該如何解決這個問題?
class ViewController: UIViewController, UINavigationControllerDelegate {
var menu: SideMenuNavigationController?
override func viewDidLoad() {
super.viewDidLoad()
// Setup the menu
setupMenu()
}
func setupMenu() {
menu = SideMenuNavigationController(rootViewController: MenuListController())
menu?.setNavigationBarHidden(true, animated: false)
menu?.presentationStyle = .menuDissolveIn
SideMenuManager.default.rightMenuNavigationController = menu
SideMenuManager.default.addPanGestureToPresent(toView: self.view)
}
func showProfile() {
performSegue(withIdentifier: "profileSegue", sender: self)
}
func showHelp() {
performSegue(withIdentifier: "helpSegue", sender: self)
}
func showSettings() {
performSegue(withIdentifier: "settingsSegue", sender: self)
}
func showPreferences() {
performSegue(withIdentifier: "preferencesSegue", sender: self)
}
}
class MenuListController: UITableViewController {
var items = ["Profile", "Help", "Settings", "Preferences", "Log Out"]
var darkColor = UIColor(red: 33/255.0, green: 33/255.0, blue: 33/255.0, alpha: 1)
override func viewDidLoad() {
super.viewDidLoad()
tableView.backgroundColor = darkColor
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
var content = cell.defaultContentConfiguration()
content.text = items[indexPath.row]
content.textProperties.color = .white
cell.contentConfiguration = content
cell.backgroundColor = darkColor
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
if indexPath.row == 0 {
// Profile
} else if indexPath.row == 1 {
// Help
} else if indexPath.row == 2 {
// Settings
} else if indexPath.row == 3 {
// Preferences
} else if indexPath.row == 4 {
// Log Out
logOut()
}
}
}
我在 Pod 的 GitHub 檔案中找不到答案。無論如何,這是鏈接: SideMenu
uj5u.com熱心網友回復:
您也可以像這樣導航。
func openSettings(){
let storyBoard = UIStoryboard(name: "ReplaceStoryBoardName", bundle: nil)
let childVc = storyBoard.instantiateViewController(withIdentifier: "ReplaceYourIdentifierFromStoryBoard") as? YourViewControllerName
childVc.anyData = self.Data // or whatever data you want to sent you can inject it here.
self.navigationController?.pushViewController(childVc, animated: true)
}
還有其他一些方式,例如NotificationCenter您可以將通知從Sidemenu View ControllerThen Observe 它發布到您ViewController嵌入的SideMenu
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/453196.html
上一篇:Perl模塊安裝在錯誤的根目錄
