尝试在 IOS 中创建滑动条菜单

Posted

技术标签:

【中文标题】尝试在 IOS 中创建滑动条菜单【英文标题】:Trying To Create a Slidebar Menu in IOS 【发布时间】:2017-04-02 02:21:26 【问题描述】:

我想在我的应用程序中创建一个滑动条菜单(如下图所示)

当我点击那个汉堡包图标时,它应该会显示一个菜单,如下所示。

我目前正在使用 SWRevealController,这是一个用 Objective C 编写的库。我创建了一个桥接头并导入了该类。这是我目前的设置

我的初始视图分支到 Menu Controller 或 UIViewTable 是 SWRevealController,segue 是 SWRevealViewControllerSegueSetController 的子类。在我的 Food Item View Controller(存在汉堡导航的控制器)中,我添加了以下代码来激活滑动条操作。

override func viewDidLoad() 
        super.viewDidLoad()

        //Creating the slidebar Navigation using SWRevealViewController 
        if self.revealViewController() != nil 
            menuButton.target = self.revealViewController()
            menuButton.action = #selector(SWRevealViewController.revealToggle(_:))
            self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
        


但是,当我单击按钮时,它仍然没有响应。当我使用我的其他应用程序执行此操作时,它运行良好。我不确定为什么它在这里不起作用

这是我用作参考的来源:http://www.appcoda.com/sidebar-menu-swift/

查看控制器完整代码

@IBOutlet weak var thumbnail_image: UIImageView!
    //@IBOutlet weak var food_detail: UITextView!
    @IBOutlet weak var testing: UILabel!

    @IBOutlet weak var menuButton: UIBarButtonItem!
    var jsonResponseFood: NSArray = NSArray() //API for types of food available
    var jsonResponseRecipe: NSArray = NSArray() // API for recipes in food
    var selectedFood: foodItem?
    var postStr: String?

    //Initializing API
    let FullRecipeAPIModel = fullRecipeAPIModel()

    override func viewDidLoad() 
        super.viewDidLoad()

        //Creating the slidebar Navigation using SWRevealViewController 
        if self.revealViewController() != nil 
            menuButton.target = self.revealViewController()
            menuButton.action = #selector(SWRevealViewController.revealToggle(_:))
            self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
        


        print(selectedFood?.name as String!)
        //testing.text = self.selectedFood?.name

        let APIModel = apiModel()

        APIModel.delegate = self
        FullRecipeAPIModel.delegate = self
        APIModel.downloadItems(postString: postStr!)

        // Do any additional setup after loading the view.
    

谢谢 ***。

【问题讨论】:

一个问题菜单按钮,用于引用为 IBOutlet 到左栏按钮项目右侧?\ 是的,没错 你能附上你的项目吗 分享视图控制器的完整代码 你的连接错误, 【参考方案1】:

您的代码中的问题是您没有将 SWRevealController 设置为根视图。明智的代码没有 Storyboard 选项可用,我们必须再次进行配置。这个库就是这样设计的。因此,如果您按以下方式更改代码,它将像魅力一样发挥作用。

if(stat == "login")
                if(responseString == "invalid")
                    self.isValid = false;
                    print(self.isValid)
                

                DispatchQueue.main.async(execute: 
                    if self.checkLogin(data: responseString!) == true 
                        let storyboard = UIStoryboard(name: "food", bundle: nil)
                        let controller = storyboard.instantiateViewController(withIdentifier: "foodItemViewController") as! foodItemViewController
                        let navController = UINavigationController(rootViewController: controller) // Creating a navigation controller with VC1 at the root of the navigation stack.
                        let appDelegate = UIApplication.shared.delegate as! AppDelegate
                        let menuView :MenuController = storyboard.instantiateViewController(withIdentifier: "menuBar") as! MenuController
                        let revealController = SWRevealViewController()

                        revealController.frontViewController = navController;
                        revealController.rearViewController = menuView;

                        appDelegate.window?.rootViewController = revealController

                    
                    else
                        //Show alert here
                        self.showAlert(title: "User Does Not Exist", alertTitle: "Close", message: "");
                    
                );
            
            else
                //CODE COULD BE SIMPLIFIED
                DispatchQueue.main.async(execute: 
                    if(responseString == "duplicate")
                        //Show alert here
                        self.showAlert(title: "User with this email already exist", alertTitle: "Close", message: "Please register with another email address")
                    
                    else
                        //Show Food UITable
                        let storyboard = UIStoryboard(name: "food", bundle: nil)
                        let controller = storyboard.instantiateViewController(withIdentifier: "entranceFoodController") 
                        /*let navController = UINavigationController(rootViewController: controller) // Creating a navigation controller with VC1 at the root of the navigation stack.*/
                        let appDelegate = UIApplication.shared.delegate as! AppDelegate

                        let menuView :MenuController = storyboard.instantiateViewController(withIdentifier: "menuBar") as! MenuController
                        let revealController = SWRevealViewController()

                        revealController.frontViewController = controller;
                        revealController.rearViewController = menuView;

                        appDelegate.window?.rootViewController = revealController                    

                );
            

【讨论】:

所以我按照建议进行了更改,但仍然无法正常工作:( 您好 Vinodh,我在为其他视图添加滑动条菜单时遇到了问题,我可以再问您一个问题吗? 很抱歉回复太晚了。这是我的问题,***.com/questions/43554848/…我已经根据我的新问题更新了我的 github 代码【参考方案2】:

我今天也在做这个,这是使用 SWRevealController 的最佳选择吗,难道没有苹果内置的方法吗?我渴望看到选项,而不是从 Github 获得一些东西,除非那是我最后的手段。

【讨论】:

嗯我不确定,但我非常喜欢 SWRevealController,它非常简单。我之前在另一个应用中使用过,效果很好,但不知道为什么在这里不工作 SWREVEALCONTROLLER 是最佳选择吗,我在 SWIFT3 工作。 其他的我没试过,但是根据经验,SWREVEALCONTROLLER是比较容易使用的一种

以上是关于尝试在 IOS 中创建滑动条菜单的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 csv 中的值。使用闪亮的滑动条?

在 Swift 中创建滑动转场

如何在 iOS 中创建滑动导航(在 Objective-C 中)

滚动条出现在滑动菜单旁边

菜单固定随滚动条滑动

iOS下简单实现滑动导航条