swift右侧的SWRevealViewController

时间:2015-05-20 14:46:51

标签: ios objective-c swift swrevealviewcontroller

我正在使用SWRevealViewController库在swift中制作一个滑出菜单,但我很难将此菜单放在右侧。我在图书馆描述中看到了这条评论

// Optional right view controller, can be nil if not used
@property (nonatomic) UIViewController *rightViewController;

但我不熟悉目标C,我无法在swift上做到这一点。这是我的默认(左)菜单代码的一部分:

class ViewController: UIViewController, AVAudioPlayerDelegate {

@IBOutlet weak var playlistOutlet: UIBarButtonItem!

override func viewDidLoad() {
    super.viewDidLoad()

    playlistOutlet.target = self.revealViewController()
    playlistOutlet.action = Selector("revealToggle:")

    self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())

}
}

从SWRevealViewController库中调用revealViewController

5 个答案:

答案 0 :(得分:6)

  

Swift 3

将此代码添加到yourViewController

if revealViewController() != nil{
        sideMenuBtn.target = revealViewController()
        sideMenuBtn.action = #selector(SWRevealViewController.rightRevealToggle(_:))
        view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
    }
在MainStoryBoard

将segue标识符值设置为 sw_right ,而不是 sw_rear

  • 为我工作

更好的选择:https://github.com/jonkykong/SideMenu

答案 1 :(得分:5)

你可以尝试这段代码:

    var storyboard = UIStoryboard(name: "Main", bundle: nil)
    var sidemenuViewController = storyboard.instantiateViewControllerWithIdentifier("sideMenu") as! SideMenuViewController
    sidemenuViewController.delegate = self
    revealViewController().rightViewController = sidemenuViewController
    revealViewController().delegate = self
    sideMenuItem.target = self.revealViewController()
    self.revealViewController().rightViewRevealWidth = self.view.frame.width * 0.8
    sideMenuItem.action = Selector("rightRevealToggle:")

答案 2 :(得分:1)

Swift 4.1

private func setRightMenu(){
    btnMenuright.addTarget(revealViewController(), action: #selector(SWRevealViewController.rightRevealToggle(_:)), for: UIControlEvents.touchUpInside)

}

当你想要sw_right显示时,我尝试这样做。这段代码对我有用

答案 3 :(得分:0)

对于右侧菜单,

menuButton.action = #selector(SWRevealViewController.rightRevealToggle(_:))

面向正在寻求本地化和RTL / LTR语言支持的人。

您需要做的就是,在创建新的本地化文件时,选择选项“ 界面构建器情节提要”而不是“ 可本地化的字符串”。它将为该语言创建另一个分镜脚本,据我所知可以这样做,因为您只能将其用于阿拉伯语。

现在,在新的故事板上,将segue重命名为“ sw_right ”,而在旧的故事板上,将其命名为“ sw_rear ”。

在菜单按钮的 viewDidLoad()中,只需检查当前的语言环境语言即可

let language = NSLocale.preferredLanguages[0],然后根据您的选择从任一侧打开菜单。

这是我的代码:

if self.revealViewController() != nil {

            menuButton.target = self.revealViewController()

            let language = NSLocale.preferredLanguages[0]

            if language == "ar-AE" || language == "ar-US" || (language.range(of: "ar-") != nil) {
                menuButton.action = #selector(SWRevealViewController.rightRevealToggle(_:))
            }
            else {
                menuButton.action = #selector(SWRevealViewController.revealToggle(_:))
            }

    self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())

        }

您还可以使用区域代码,因为我注意到用户可以单独更改语言或区域。

let region = NSLocale.current.regionCode

答案 4 :(得分:0)

 *override func viewDidLoad() {
  super.viewDidLoad()
.
.
.
 menuButton.addTarget(revealViewController(), action: #selector(SWRevealViewController.rightRevealToggle(_:)), for: .touchUpInside)
  if revealViewController() != nil {
   revealViewController().rightViewRevealWidth = 200 //any number
   view.addGestureRecognizer(self.revealViewController().panGestureRecognizer()
   view.addGestureRecognizer(self.revealViewController().tapGestureRecognizer())
        }
    }
}
在主故事板上的

从SWRevealViewController向您的sideMenuViewController添加类型为“ custom”的segue 然后选择segue,然后在检查器中将其标识符设置为sw_right 并分类为SWRevealViewControllerSegueSetController 就是这样。**