gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:13:55 24 4
gpt4 key购买 nike

我正在开发应用程序,注册过程后主屏幕将出现。并且 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com