Swift - 如何在NSObject中使用pushViewController

时间:2018-03-19 05:12:23

标签: swift

我有一个幻灯片进/出侧菜单,当点击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)
    }

...

1 个答案:

答案 0 :(得分:1)

1

您可以在@property课程中parentVC SlideMenuLauncher。{/ p>

var parentVC: UIViewController?

然后您可以使用此代替self

parentVC!.navigationController?.pushViewController(destinationVC, animated: false)

2

您可以发布通知,而不是从SlideMenuLauncher类推送,并在通知中传递destinationVC作为对象。在parentVC中观察此通知,然后从通知对象中获取destinationVC并推送控制器。

3

您可以对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)
}