Значок меню на боковой панели не виден в контроллере вида на панели вкладок - PullRequest
0 голосов
/ 24 апреля 2019

Я реализовал боковую панель, используя SWRevealViewController. Но когда я делаю то же самое, используя контроллер представления на панели вкладок, значок меню становится невидимым только на экранах на основе вкладок. Значок виден в конструкторе интерфейса, но невидим в симуляторе / устройстве. Функциональность работает на каждом экране, даже в контроллере представления на основе вкладок. Когда я перетаскиваю слева направо и наоборот, функциональность работает нормально. Только проблема в том, что значок меню невидим в симуляторе. Кто-нибудь может мне помочь?

Заранее спасибо.

ниже - файл swift для вкладки

import UIKit

class ItemOneViewController: UIViewController {


@IBOutlet weak var menuBar: UIBarButtonItem!
override func viewDidLoad() {
    super.viewDidLoad()

    setMenuBarBtn(menuBar: menuBar)

    navigationController!.navigationBar.barTintColor = UIColor.color(.blue)
}

func setMenuBarBtn(menuBar: UIBarButtonItem) {
    menuBar.target = revealViewController()
    menuBar.action = #selector(SWRevealViewController.revealToggle(_:))
    view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
}

func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
    return UIInterfaceOrientationMask.portrait
}
} 

Код похож на три вкладки.

Я выполнил следующие задачи, прежде чем задавать вопрос здесь

  1. Удаленные и воссозданные экраны два раза.
  2. Крест все проверил и сравнил исходный код сцен на панели вкладок с другими сценами.
  3. погуглил.

Ниже приведены изображения для справки

Экран на основе вкладок с функциональностью боковой панели (работает хорошо)

Экран на основе вкладок без значка меню (здесь проблема не устранена, я хочу, чтобы отображался значок меню)

HomeScreen со значком меню (Работает хорошо)

Инспектор атрибутов контроллера навигации

моя раскадровка

Элемент Один View View Controller иерархия представлений

Элемент One view Сцена, относящаяся к контроллеру, связанная с контроллером

Ответы [ 2 ]

0 голосов
/ 24 апреля 2019

Вам необходимо создать класс tabbarController, как показано ниже, и назначить этот класс ViewController на панель вкладок на раскадровке ... Я не тестировал этот код, но что-то подобное должно работать в вашем случае

class ViewController: UITabBarController {

override func viewDidLoad() {
    super.viewDidLoad()
    let firstSw = setRootViewControllerFor(identifier: "firstViewController") as! SWRevealViewController
    let secondsw = setRootViewControllerFor(identifier: "secondViewController") as! SWRevealViewController
    let thirdSw = setRootViewControllerFor(identifier: "thirdController") as! SWRevealViewController
    self.viewControllers = [firstSw,secondsw, thirdSw]
    // Do any additional setup after loading the view.
}

func setRootViewControllerFor(identifier:String)->SWRevealViewController
{
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let sw = storyboard.instantiateViewController(withIdentifier: "sw") as! SWRevealViewController
    self.view.window?.rootViewController = sw
    let destinationController = self.storyboard?.instantiateViewController(withIdentifier: identifier)
    let navigationController = UINavigationController(rootViewController: destinationController!)
    navigationController.navigationBar.isHidden=false
    navigationController.setNavigationTints()        //call your UI method to set 
    sw.setFront(navigationController, animated: true)
    return sw
}

/*
// MARK: - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    // Get the new view controller using segue.destination.
    // Pass the selected object to the new view controller.
}
*/

}

ИЛИ После этого нет необходимости создавать tabbarController

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // create UIWindow with the same size as main screen
    window = UIWindow(frame: UIScreen.mainScreen().bounds)

    // create story board. Default story board will be named as Main.storyboard in your project.
    let storyboard = UIStoryboard(name: "Main", bundle: nil)

    // create view controllers from storyboard
    // Make sure you set Storyboard ID for both the viewcontrollers in 
    // Interface Builder -> Identitiy Inspector -> Storyboard ID
    let firstSw = setRootViewControllerFor(identifier: "firstViewController") as! SWRevealViewController
    let secondsw = setRootViewControllerFor(identifier: "secondViewController") as! SWRevealViewController
    let thirdSw = setRootViewControllerFor(identifier: "thirdController") as! SWRevealViewController

    // Set up the Tab Bar Controller to have two tabs
    let tabBarController = UITabBarController()
    tabBarController.viewControllers =  [firstSw,secondsw, thirdSw]

    // Make the Tab Bar Controller the root view controller
    window?.rootViewController = tabBarController
    window?.makeKeyAndVisible()

    return true
}


 func setRootViewControllerFor(identifier:String)->SWRevealViewController
    {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let sw = storyboard.instantiateViewController(withIdentifier: "sw") as! SWRevealViewController
        self.view.window?.rootViewController = sw
        let destinationController = self.storyboard?.instantiateViewController(withIdentifier: identifier)
        let navigationController = UINavigationController(rootViewController: destinationController!)
        navigationController.navigationBar.isHidden=false
        navigationController.setNavigationTints()        //call your UI method to set 
        sw.setFront(navigationController, animated: true)
        return sw
    }
0 голосов
/ 24 апреля 2019

Вы дали добавить обычную кнопку на HomeViewController enter image description here

Затем непосредственно выполните переход через раскадровку (из кнопки меню бургера).

@IBAction func sideMenuBtnAction(_ sender: UIButton) {
         performSegue(withIdentifier: "sideMenu", sender: self)
    }

enter image description here Затем на SideMenuController:

import UIKit
import SideMenu

class SideMenuViewController: UIViewController {


    @IBOutlet var sideMenuTableView: UITableView!

    override func viewDidLoad() {
            super.viewDidLoad()

            SideMenuManager.default.menuPresentMode = .menuSlideIn
            SideMenuManager.default.menuFadeStatusBar = false
            SideMenuManager.default.menuWidth = self.view.frame.width / 1.4
            SideMenuManager.default.menuShadowOpacity = 0.3
            sideMenuTableView.tableFooterView = UIView(frame: .zero)
      }
 }
...