【问题标题】:How to configure SWRevealViewController Programmatically?如何以编程方式配置 SWRevealViewController?
【发布时间】:2016-11-20 17:58:51
【问题描述】:

我正在处理注册过程后将出现主屏幕的应用程序。并且 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)

但它给了我如下错误。

无法将 'UINavigationController' (0x110d9f860) 类型的值转换为 'SWRevealViewController' (0x10dc346b8)。

我也试过下面的链接

SWRevealViewController solution

但这对我也没有帮助。

【问题讨论】:

  • 您好,当您从 github 下载 SWRevealController 时,它有示例文件夹和示例 sotryboard 文件夹。在示例文件夹中,他们有一个项目,他们在其中以编程方式实现了 swreveal!
  • 他们有从一个视图导航到另一个视图的代码。我想以编程方式配置 swrevealviewcontrtoller
  • 他们知道你如何以编程方式设置 svprogresshud。看看 appDelegate 我认为它在那里。
  • @BashirSidani 我想要 swift 中的代码而不是目标 c 中的代码

标签: ios swift xcode swrevealviewcontroller residemenu


【解决方案1】:

这是我的配置方式:

我创建了 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 以便拥有左右菜单的所有代码。

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

extension HomeViewController: SWRevealViewControllerDelegate {

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

我在 HomeViewController 上设置了一个 alpha 值,当它不在前面时让它变暗。

故事板部分

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

请记住,您可能还想为 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)

还有voilà,你现在有:

  • RegisterViewController 和 HomeViewController 之间的完美过渡
  • 您的 SWRevealController 设置正确,带有左右菜单
  • 左右键项目,点击手势打开相应菜单
  • 在 HomeViewController 打开时更改其 alpha

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

【讨论】:

    猜你喜欢
    • 2015-07-30
    • 2014-12-15
    • 2011-02-17
    • 2012-10-09
    • 1970-01-01
    • 2019-11-16
    • 2015-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多