我如何在 ios 的 swreveal 视图控制器中推送弹出窗口?

How can i push pop in swreveal view controller in ios?

我有一个类似 Facebook 的应用程序。我想在 swreveal 视图控制器中推送和弹出。怎样才能做到这一点?检查下图。

任何帮助将不胜感激。

在您的应用委托中,您必须通过 window 的 rootViewController 来管理 Login/Dashboard。

第 1 步: 在您的 AppDelegate 中编写一个方法,例如调用 setupRootVC()

func setupRootVC(){
    if userIsLoggedIn{
       window.rootViewController = yourSWRevealControllerObj
    }else{
       window.rootViewController = yourLoginControllerObj
    }
}

步骤 2:didFinishLaunchingWithOptions 方法调用 setupRootVC() 方法。

第 3 步: 在您的 LoginVC 中,用户成功登录后调用 AppDelegate 的 setupRootVC() 方法。

第 4 步:确保 SWRevealControllerfrontViewControllerUINavigationController 内,这样您就可以推入和弹出它。

我建议您阅读更多有关 iOS 应用架构以及 rootViewControllerUINavigationController 工作原理的信息。 希望对您有所帮助。

如果你想从 swreveal 推送到任何控制器

UIStoryboard*Storyboard=[AppDelegate storyBoardType];
    yourController  *your=(yourController*)[Storyboard instantiateViewControllerWithIdentifier:@"yourControllerId"];

    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController: your];

    [navController setViewControllers: @[your] animated: YES];
    [self.revealViewController setFrontViewController:navController];
    [self.revealViewController setFrontViewPosition: FrontViewPositionLeft animated: YES];

        }

从任何控制器到 swreveal 视图控制器,您必须在点击操作中添加此行

 [self.revealViewController revealToggleAnimated:YES];

我会有这样的故事板:

在登录视图控制器中:

    @IBAction func skip(_ sender: Any) {
    // Show dashboard

    let sb = UIStoryboard(name: "Main", bundle: nil)
    let controller = sb.instantiateViewController(withIdentifier: "DashboardNavigationController")

    revealViewController().setFront(controller, animated: true)
}

@IBAction func validateUser(_ sender: Any) {
    // show profile

    // Here test for valid user name and password
    // If OK
    let sb = UIStoryboard(name: "Main", bundle: nil)
    let dashboardNC = sb.instantiateViewController(withIdentifier: "DashboardNavigationController") as! UINavigationController

    let profileVC = sb.instantiateViewController(withIdentifier: "ProfileViewController")
    dashboardNC .pushViewController(profileVC, animated: false)

    revealViewController().setFront(dashboardNC, animated: true)
}

@IBAction func dismissKeyboard(_ textField: UITextField) {
    textField.resignFirstResponder()
}

在 MenuTableViewController(SideMenu)中:

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    tableView.deselectRow(at: indexPath, animated: true)

    // ...
    let dashboardNC = revealViewController().frontViewController as! UINavigationController
    let nc = revealViewController().frontViewController as! UINavigationController
    let vc = nc.topViewController

    if !(vc is ProfileViewController) {
        // Instantiate controller from story board
        let sb = UIStoryboard(name: "Main", bundle: nil)
        let controller = sb.instantiateViewController(withIdentifier: "ProfileViewController")
        dashboardNC.pushViewController(controller, animated: false)
    }

    // Push it with SWRevealViewController
    revealViewController().pushFrontViewController(dashboardNC, animated: true)
}

仪表板视图控制器:

class DashboardViewController: UIViewController {

@IBOutlet weak var revealButton: UIBarButtonItem!
@IBOutlet weak var rightButton: UIBarButtonItem!

override func viewDidLoad() {
    super.viewDidLoad()

    revealButton.target = revealViewController()
    revealButton.action = #selector(SWRevealViewController.revealToggle(_:))

    rightButton.target = revealViewController()
    rightButton.action = #selector(SWRevealViewController.rightRevealToggle(_:))

    revealViewController().tapGestureRecognizer()
    revealViewController().panGestureRecognizer()

    revealViewController().rearViewRevealOverdraw = 0
    revealViewController().rightViewRevealOverdraw = 0
}

不是Objective-C但您可以轻松翻译!

你可以使用 UINavigationController 的方法:

- (void)setViewControllers:(NSArray<UIViewController *> *)viewControllers animated:(BOOL)animated NS_AVAILABLE_IOS(3_0);

但请注意,它设置了整个导航控制器堆栈。 所以您可能必须采用当前的视图控制器状态 来自 属性

@property(nonatomic,copy) NSArray<__kindof UIViewController *> *viewControllers; 

分配一个新的

NSMutableArray *controllers = [NSMutableArray arrayWithArray:self.navigationController viewControllers];

[controllers addObject:VC1];
[controllers addObject:VC2];
[controllers addObject:VC3];
[self.navigationController setViewControllers:controllers animated:YES];