swift 右侧的 SWRevealViewController

SWRevealViewController from the right side on swift

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

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

但我不熟悉 objective 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

你能试试这个代码吗:

    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:")

我遵循了这个解决方案,在前视图的控制器中使用这个:

override func viewDidLoad() {
    super.viewDidLoad()

    if self.revealViewController() != nil {
        favoritesButton.target = self.revealViewController()
        favoritesButton.action = "rightRevealToggle:"
        self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
    }
}

不要忘记先创建项目栏按钮的出口。在故事板中,将 segue 值设置为 sw_right

首先,这对我不起作用,但清洁有帮助。

Swift 3

将此代码添加到您的 ViewController

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

Swift 4.1

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

}

当您希望 sw_right 出现时,我尝试这样做。这段代码对我有用

对于右侧的菜单,

menuButton.action = #select或(SWRevealViewController.rightRevealToggle(_:))

对于正在寻找 RTL/LTR 语言本地化和支持的用户。

您需要做的就是,当您创建一个新的本地化文件时,select选项“Interface builder Storyboard”而不是“”可本地化的字符串”。它将为该语言创建另一个故事板,这样做是可以的,因为据我所知,您只会将它用于阿拉伯语。

现在在新故事板中将 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
 *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())
        }
    }
}

在主故事板中添加类型 "custom" 从 SWRevealViewController 到你的 sideMenuViewController 然后 select segue 并在检查器中将其标识符设置为 sw_right class 到 SWRevealViewControllerSegueSetController 就这些了。**