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