快速关闭侧边菜单时如何更改为其原始视图颜色

Posted

技术标签:

【中文标题】快速关闭侧边菜单时如何更改为其原始视图颜色【英文标题】:How to change to its original View colour when side menu closed in swift 【发布时间】:2019-12-24 10:11:41 【问题描述】:

我正在使用此 pod https://github.com/jonkykong/SideMenu 的左侧菜单。在这里,我将故事板侧菜单按钮提供给 UISideMenuNavigationController Present Modually Segue 并且侧菜单工作正常,但我的问题是,如果我单击(打开)侧菜单按钮,那么我已经更改了背景视图颜色,这不是当我关闭侧边菜单时更改为原来的颜色。

如果我更改我的代码,就像下面提到的答案:

import UIKit
import SwiftKeychainWrapper
import SideMenu

class ProfileViewController: UIViewController, UITextFieldDelegate 

  override func viewDidLoad() 
      super.viewDidLoad()
  
 @IBAction func sideMenubtn(_ sender: Any) 
   view?.backgroundColor = UIColor(white: 1, alpha: 0.9)




extension ProfileViewController : SideMenuNavigationControllerDelegate 

func sideMenuWillDisappear(menu: SideMenuNavigationController, animated: Bool) 
  view?.backgroundColor = UIColor.white


我收到了这个错误:

使用未声明的类型'SideMenuNavigationControllerDelegate'

使用未声明的类型'SideMenuNavigationController'

当我关闭侧边菜单时如何去除这种颜色,请帮助我。

【问题讨论】:

【参考方案1】:
import SideMenu
import UIKit

class ViewController: UIViewController 

    var menu: SideMenuNavigationController?

    override func viewDidLoad() 
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        menu = SideMenuNavigationController(rootViewController: MenuListController())
        menu?.leftSide = true
        menu?.setNavigationBarHidden(true, animated: false)
        SideMenuManager.default.addPanGestureToPresent(toView: self.view)
        SideMenuManager.default.leftMenuNavigationController = menu
    

    @IBAction func didTappedMenu() 
        present(menu!, animated: true)

    


class MenuListController: UITableViewController 

    var item = ["one","two","there","four","five","six","seven","eight","nine"]
    let darkColor = UIColor(red: 33/255.0, green: 33/255.0, blue: 33/255.0, alpha: 1)

    override func viewDidLoad() 
        super.viewDidLoad()
        tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
        tableView.backgroundColor = darkColor

    

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return item.count
    

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell" , for: indexPath)
        cell.textLabel?.text = item[indexPath.row]
        cell.textLabel?.textColor = .white
        cell.backgroundColor = darkColor
        return cell
    

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
        tableView.deselectRow(at: indexPath, animated: true)
    


【讨论】:

如果可能,请努力提供额外的解释,而不仅仅是代码。这样的答案往往更有用,因为它们可以帮助社区成员,尤其是新开发人员更好地理解解决方案的推理,并且可以帮助避免解决后续问题的需要。【参考方案2】:

您可以在视图控制器中实现SideMenuNavigationControllerDelegate 方法,然后在sideMenuWillDisappear 触发时更改颜色

【讨论】:

是的,我在我的视图控制器中添加了extension MyViewController: SideMenuNavigationControllerDelegate ……然后我收到了这个错误Use of undeclared type 'SideMenuNavigationControllerDelegate'为什么?? 是的,我已经用我的总代码和错误编辑了我的问题,请检查一次.. 请让我知道我在哪里做错了 如何在视图 didload 中添加侧边菜单委托【参考方案3】:

添加委托方法。它会工作你可以看到下面的代码-

extension YourClassName : SideMenuNavigationControllerDelegate 
func sideMenuWillDisappear(menu: SideMenuNavigationController, animated: Bool) 
    *do the color thing*


记住要做-

import SideMenu

但我不建议您像这样更改视图的颜色。您可以使用侧菜单的 alpha 属性在显示侧菜单时使背景视图变暗。参考来自 -

let menu = storyboard!.instantiateViewController(withIdentifier: "SideMenuNavigationController") as! SideMenuNavigationController
    var set = SideMenuSettings()
    set.statusBarEndAlpha = 0
    set.presentationStyle = SideMenuPresentationStyle.menuSlideIn
    set.presentationStyle.presentingEndAlpha = 0.5


    set.menuWidth = min(view.frame.width, view.frame.height) * 0.90
    //menu.sideMenuManager.addScreenEdgePanGesturesToPresent(toView: self.view)
    menu.settings = set
    //SideMenuManager.default.addScreenEdgePanGesturesToPresent(toView: view)
    SideMenuManager.default.leftMenuNavigationController = menu

【讨论】:

我在上面的问题中添加了我的总代码并提到了我的错误,请看一下,让我知道代码中的错误 用于在侧边菜单进出时背景颜色变化,我应该在哪里放置您提到的第二个代码 如何在视图 didload 中添加侧边菜单委托 您不需要在视图 didload 中添加委托。您可以将第二个代码放在一个函数中,并在 veiwdidload(将出现侧边菜单的主视图的)中调用该函数。 是的,同样的错误 Use of undeclared type 'SideMenuNavigationController' in first line

以上是关于快速关闭侧边菜单时如何更改为其原始视图颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何在侧边菜单的底部快速添加一个按钮?

如何实现像 spotify 这样的侧边栏菜单?

带有可折叠侧边栏菜单 Swift 的 UITapGestureRecognizer

如何快速制作侧边菜单(subSidemenu

无法在 IOS Swift 中使用委托方法关闭侧边菜单

swrevealviewcontroller 在侧边菜单打开/关闭时更改切换按钮图像?