ios - 如何以编程方式配置 SWRevealViewController?

标签 ios swift xcode swrevealviewcontroller residemenu

我正在开发应用程序,注册过程后主屏幕将出现。并且 SWRevealViewController 已在主屏幕中配置。

我想以编程方式配置 SWRevealViewController。

下面是我的代码

let storyboard = UIStoryboard(name: "MainSW", bundle: nil)
        let vc = storyboard.instantiateViewControllerWithIdentifier("HomeViewController") as! HomeViewController
        let rvc:SWRevealViewController = self.revealViewController() as SWRevealViewController
        rvc.pushFrontViewController(vc, animated: true)

但是它给了我如下错误。

Could not cast value of type 'UINavigationController' (0x110d9f860) to 'SWRevealViewController' (0x10dc346b8).

我也尝试过下面的链接

SWRevealViewController solution

但这对我也没有帮助。

最佳答案

这是我的配置方法:

我创建了 2 个 UIBarButtonItem 作为 HomeViewController 的属性(我将在代码中设置它们)

let leftButton = UIBarButtonItem()
let rightButton = UIBarButtonItem()

viewDidLoad方法中:

revealViewController().delegate = self

viewWillAppear方法中:

if (revealViewController() != nil) {

      revealViewController().rearViewRevealWidth = -50
      revealViewController().rightViewRevealWidth = -50

      leftButton.image = UIImage(named: "yourImageName")! // check that the image exists, don't use !
      leftButton.style = .plain
      leftButton.target = revealViewController()
      leftButton.action = #selector(SWRevealViewController.revealToggle(_:))

      rightButton.image = UIImage(named: "yourImageName")! // check that the image exists, don't use !
      rightButton.style = .plain
      rightButton.target = revealViewController()
      rightButton.action = #selector(SWRevealViewController.rightRevealToggle(_:))

      view.addGestureRecognizer(revealViewController().panGestureRecognizer())
      view.addGestureRecognizer(revealViewController().tapGestureRecognizer())
}

这是我用来在 HomeViewController 中设置 SWRevealViewController 以便拥有左右菜单的所有代码。

您现在可以使用委托(delegate)方法来自定义您喜欢的行为:

extension HomeViewController: SWRevealViewControllerDelegate {

    func revealController(_ revealController: SWRevealViewController!, willMoveTo position: FrontViewPosition) {          
        view.alpha = position == FrontViewPosition.left ? 1.0 : 0.6
    }
}

我在 HomeViewController 上设置了一个 alpha,使其不在前面时变暗。

对于 Storyboard部分:

  • 在 Storyboard 中创建 UIViewController。
  • 将其类更改为 SWRevealViewController
  • 再创建 2 个 UIViewController(1 个用于左侧菜单,1 个用于右侧菜单。如果您只需要 1 个菜单,请根据需要申请左侧或右侧菜单)
  • 使用 segues(rearright segues)将 SWRevealViewController 链接到 2 个 UIViewController
  • 使用 front segue 将 SWRevealViewController 链接到您的 UINavigationController。
  • 将 UINavigationController 与 HomeViewController 链接(具有根关系)

请记住,您可能还想为 RegisterViewController 和 HomeViewController 之间的转换创建自定义 Segue。

您也可以通过编程方式创建它:

class RegisterToHomeSegue: UIStoryboardSegue {

    override func perform() {

        let source = self.source as! RegisterViewController
        let homeVC = self.destination as! HomeViewController

        let window = source.view.window
        window?.rootViewController = homeVC
        window?.addSubview(source.view)

        UIView.transition(from: source.view, to: homeVC.view, duration: 0.50, options: .transitionCrossDissolve, completion: nil)
    }
}

并在Storyboard中将类segue从RegisterViewController更改为SWRevealViewController到这个新的RegisterToHomeSegue并给它一个标识符。这样您就可以在 RegisterViewController 中调用:

performSegue(withIdentifier: "yourIdentifier", sender: nil)

,您现在拥有:

  • RegisterViewController 和 HomeViewController 之间的良好过渡
  • 您的 SWRevealController 设置正确,带有左右菜单
  • 左右按钮项,通过点击手势打开相应的菜单
  • 在 HomeViewController 打开时更改其透明度

告诉我这是否对你有帮助。

关于ios - 如何以编程方式配置 SWRevealViewController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38431436/

相关文章:

c - 如何在终端上显示 Xcode 输出?

IOS:具有清晰颜色的 View Controller

ios - 在应用程序 IOS Objective C 启动时添加新的 View Controller

ios - getter setter 模型类 Oop

ios - 在 tableView 中使用多个自定义 UITableViewCell(_cellForRowAt :)

ios - 在应用程序购买中收到零产品

swift - 使 TableHeaderView 不滚动

xcode - 由于信号 : Segmentation fault: 11 when trying to build,命令失败

ios - UITextFieldDelegate textFieldShouldReturn 调用者

ios - 在窗口中使用我的尺寸打开模态 ViewController