无法使用 IOS Swift 中的委托方法关闭侧边菜单
unable to dismiss side menu using delegate method in IOS Swift
所以,基本上,我使用 pod 的模块侧边菜单实现了侧边菜单。但是,我卡在了最后一部分,当我点击菜单中的任何选项时,侧边菜单将自行关闭并根据我选择的菜单选项显示相应的内容。
我的主视图控制器代码如下:
class 配置文件:UIViewController、MenuControllerDelegate {
var menu: SideMenuNavigationController?
var menuController:MenuListController!
覆盖 func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
menu = SideMenuNavigationController(rootViewController: MenuListController())
menu?.leftSide = true
menu?.setNavigationBarHidden(true, animated: false)
SideMenuManager.default.leftMenuNavigationController = menu
SideMenuManager.default.addPanGestureToPresent(toView: self.view)
setupNavBaritem()
}
func handleMenuToggle(menuOption: String?) {
print("menuToggle function reached")
menu?.dismiss(animated: true, completion: nil)
}
func setupNavBaritem() {
let menuicon = UIImage(named: "menu")
let menubtn = UIButton(type: .system)
menubtn.setImage(menuicon, for: .normal)
menubtn.frame = CGRect(x: 0, y: 0, width: 35, height: 35)
navigationItem.leftBarButtonItem = UIBarButtonItem(customView: menubtn)
menubtn.addTarget(self, action: #selector(menubtntapped), for: .touchUpInside)
navigationController?.navigationBar.isTranslucent = false
}
@objc func menubtntapped(){
present(menu!,animated:true)
}
}
那么这是我的菜单控制器:
class MenuListController:UITableViewController {
var menuitems = ["1","2","3","4"]
var delegate:MenuControllerDelegate?
override func viewDidLoad() {
super.viewDidLoad()
tableView = UITableView()
tableView.delegate = self
tableView.dataSource = self
tableView.register(MenuCell.self, forCellReuseIdentifier: "menucell")
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return menuitems.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "menucell", for: indexPath) as! MenuCell
let menuetext = menuitems[indexPath.row]
let menuicon = menuimg[indexPath.row]
cell.setmenucell(iconimg: menuicon, text: menuetext)
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let selectedMenu = menuitems[indexPath.row]
tableView.deselectRow(at: indexPath, animated: true)
delegate?.handleMenuToggle(menuOption: selectedMenu)
}
}
这是我的协议:
协议 MenuControllerDelegate {
func handleMenuToggle(menuOption:String? )
}
新更新!
通过委托设置,我能够达到切换功能并打印(“达到菜单切换功能”)。但我的解雇不起作用。我已经搜索了一段时间,似乎很多人都无法使用关闭功能关闭此侧边菜单。有什么解决方法可以解决这个问题吗?我尝试了一些,包括设置新的根控制器,但没有用
更改委托调用时centeController 的框架。当你想关闭时设置0。
UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0, options: .curveEaseInOut, animations: {
self.centerNavigationController.view.frame.origin.x = self.centerNavigationController.view.frame.width - 80
}, completion: nil)
我错过了这个函数中的委托
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let selectedMenu = menuitems[indexPath.row]
let temp = Profile()
tableView.deselectRow(at: indexPath, animated: true)
self.delegate = temp
delegate?.handleMenuToggle(menuOption: selectedMenu)
}
现在,我可以打印出我的菜单切换功能了!
所以,基本上,我使用 pod 的模块侧边菜单实现了侧边菜单。但是,我卡在了最后一部分,当我点击菜单中的任何选项时,侧边菜单将自行关闭并根据我选择的菜单选项显示相应的内容。
我的主视图控制器代码如下:
class 配置文件:UIViewController、MenuControllerDelegate {
var menu: SideMenuNavigationController?
var menuController:MenuListController!
覆盖 func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
menu = SideMenuNavigationController(rootViewController: MenuListController())
menu?.leftSide = true
menu?.setNavigationBarHidden(true, animated: false)
SideMenuManager.default.leftMenuNavigationController = menu
SideMenuManager.default.addPanGestureToPresent(toView: self.view)
setupNavBaritem()
}
func handleMenuToggle(menuOption: String?) {
print("menuToggle function reached")
menu?.dismiss(animated: true, completion: nil)
}
func setupNavBaritem() {
let menuicon = UIImage(named: "menu")
let menubtn = UIButton(type: .system)
menubtn.setImage(menuicon, for: .normal)
menubtn.frame = CGRect(x: 0, y: 0, width: 35, height: 35)
navigationItem.leftBarButtonItem = UIBarButtonItem(customView: menubtn)
menubtn.addTarget(self, action: #selector(menubtntapped), for: .touchUpInside)
navigationController?.navigationBar.isTranslucent = false
}
@objc func menubtntapped(){
present(menu!,animated:true)
}
}
那么这是我的菜单控制器:
class MenuListController:UITableViewController {
var menuitems = ["1","2","3","4"]
var delegate:MenuControllerDelegate?
override func viewDidLoad() {
super.viewDidLoad()
tableView = UITableView()
tableView.delegate = self
tableView.dataSource = self
tableView.register(MenuCell.self, forCellReuseIdentifier: "menucell")
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return menuitems.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "menucell", for: indexPath) as! MenuCell
let menuetext = menuitems[indexPath.row]
let menuicon = menuimg[indexPath.row]
cell.setmenucell(iconimg: menuicon, text: menuetext)
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let selectedMenu = menuitems[indexPath.row]
tableView.deselectRow(at: indexPath, animated: true)
delegate?.handleMenuToggle(menuOption: selectedMenu)
}
}
这是我的协议:
协议 MenuControllerDelegate {
func handleMenuToggle(menuOption:String? )
}
新更新! 通过委托设置,我能够达到切换功能并打印(“达到菜单切换功能”)。但我的解雇不起作用。我已经搜索了一段时间,似乎很多人都无法使用关闭功能关闭此侧边菜单。有什么解决方法可以解决这个问题吗?我尝试了一些,包括设置新的根控制器,但没有用
更改委托调用时centeController 的框架。当你想关闭时设置0。
UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0, options: .curveEaseInOut, animations: {
self.centerNavigationController.view.frame.origin.x = self.centerNavigationController.view.frame.width - 80
}, completion: nil)
我错过了这个函数中的委托
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let selectedMenu = menuitems[indexPath.row]
let temp = Profile()
tableView.deselectRow(at: indexPath, animated: true)
self.delegate = temp
delegate?.handleMenuToggle(menuOption: selectedMenu)
}
现在,我可以打印出我的菜单切换功能了!