невозможно закрыть боковое меню с помощью метода делегата в IOS Swift - PullRequest
0 голосов
/ 21 июня 2020

Итак, в основном, я реализовал SideMenu, используя боковое меню модуля из pod. однако я застрял в последней части, где, когда я нажимаю на любой из параметров внутри меню, боковое меню закрывается и отображает соответствующий контент в зависимости от того, какой вариант меню я выбрал.

мой код для моего контроллер основного представления ниже:

Профиль класса: UIViewController, MenuControllerDelegate {

var menu: SideMenuNavigationController?
var menuController:MenuListController!

переопределить удовольствие c 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)
}
}

тогда это мой контроллер меню:

класс 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? )

}

Новые обновления! с настройкой делегата я могу получить доступ к функции переключения и печати («функция menuToggle достигнута»). но мое увольнение не работает. Я долго искал и, похоже, у многих людей возникли проблемы с использованием функции увольнения, чтобы закрыть это побочное меню. какой обходной путь может сработать? Я пробовал несколько, включая установку нового контроллера root, который не работал

Ответы [ 2 ]

0 голосов
/ 21 июня 2020

я пропустил делегата в этой функции

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)
}

теперь, я могу распечатать свою функцию переключения меню!

0 голосов
/ 21 июня 2020

Изменить фрейм 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)
...