我有一个幻灯片进/出侧菜单,当点击nab栏中的leftBarButtonItem时调用。
我用NSObject编写了幻灯片菜单,我知道NSObject没有pushViewController方法。
navigationController?.pushViewController
我在NSObject的UITableView中有一个菜单,我想要推送viewController。
我该如何使这项工作?谢谢。
import UIKit
class SlideMenuLauncher: NSObject, UITableViewDelegate,
UITableViewDataSource {
...
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let destinationVC: UIViewController
switch indexPath.row {
case 0:
destinationVC = ControllerA()
case 1:
destinationVC = ControllerB()
default:
destinationVC = HomeController()
}
self.navigationController?.pushViewController(destinationVC, animated: false)
}
...
答案 0 :(得分:1)
您可以在@property
课程中parentVC
SlideMenuLauncher
。{/ p>
var parentVC: UIViewController?
然后您可以使用此代替self
。
parentVC!.navigationController?.pushViewController(destinationVC, animated: false)
您可以发布通知,而不是从SlideMenuLauncher
类推送,并在通知中传递destinationVC
作为对象。在parentVC
中观察此通知,然后从通知对象中获取destinationVC
并推送控制器。
您可以对didSelectRowAt
事件进行阻止或委托。
阻止示例:
/// Declare a block in `SideMenuLauncher`
typealias TableEventBlock = (_ controller: UIViewController) -> Void
var tableEventBlock: TableEventBlock?
/// In table did select method
if tableEventBlock != nil {
tableEventBlock!(destinationVC)
}
您需要在parentVC
中定义其回调(您可以在任意位置定义,在viewDidLoad:
中执行此操作),并且必须使用SideMenuLAuncher
的实例。
sideMenuLauncherInstance.tableEventBlock = { controller in
self.navigationController?.pushViewController(controller, animated: false)
}