Получить пользовательский класс NavigationController из пользовательского UIViewController - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь реализовать боковое навигационное меню (такое, которое есть у нас в Android) в iOS App. До сих пор я пробовал следующее: -

mystoryboard

AppDelegate.swift: -

class AppDelegate: UIResponder, UIApplicationDelegate {
 var window: UIWindow?
 var bridge: RCTBridge!

 func application(_ application: UIApplication, 
   didFinishLaunchingWithOptions launchOptions: 
 [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

 let sb = UIStoryboard(name: "mystoryboard", bundle: Bundle.main)
 let rootViewController: UIViewController = 
 sb.instantiateViewController(withIdentifier: 
 "NativeLabelSwiftViewController") as UIViewController

 let navigationController = UINavigationController(rootViewController: 
 rootViewController)

 window = UIWindow(frame: UIScreen.main.bounds)
 window!.rootViewController = navigationController
 window!.makeKeyAndVisible()

 return true
}

Выше приведен мой класс AppDelegate, так как это проект React Native, у нас также есть сгенерированный код. Для добавления моего rootViewClass добавлен следующий код (NativeLabelSwift)с помощью следующего кода: -

  let sb = UIStoryboard(name: "mystoryboard", bundle: Bundle.main)
  let rootViewController: UIViewController = 
   sb.instantiateViewController(withIdentifier: 
  "NativeLabelSwiftViewController") as UIViewController

NavigationLabelSwiftViewController.swift (класс настраиваемого представления): -

 class NativeLabelSwiftViewController: UIViewController{

   var bridge: RCTBridge!
   override func viewDidLoad() {
     super.viewDidLoad()

     title = "Production Tracking"
     let btn2 = UIButton(type: .custom)
     btn2.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
     btn2.addTarget(self,
     action:#selector(NativeLabelSwiftViewController.
     onBtn2Clicked.(_:)), for: .touchUpInside)
    let item2 = UIBarButtonItem(customView: btn2)

    self.navigationItem.setLeftBarButton(item2, animated: true)
  }

  @IBAction func onBtn2Clicked(_ sender: UIBarButtonItem) {
    if let navViewController = self.navigationController as? 
     NavigationController {
       // navigation view controller is available
   }
  else{
    // navigation view controller not available
  } 
}

}

Контроллер навигации имеет класс UIViewController (NativeLabelSwiftViewController), имеющий кнопку на панели вкладок. При нажатии кнопки мне нужно получить доступ к методу контроллера навигации. Но я не могу получить контроллер навигации, используя следующий код: -

     let navViewController = self.navigationController as? 
     NavigationController;   //this is NIL

Но

      let uiViewController = self.navigationController as? 
      UINavigationController;   //this is not NIL

1 Ответ

0 голосов
/ 12 февраля 2019

Вы не ссылаетесь на свой пользовательский контроллер навигации в AppDelegate.Вы использовали UINavigationController(rootViewController: rootViewController).

Вы, если хотите использовать storyBoard NavigationController, в AppDelegate используйте -

let nav = UIStoryboard.init(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "NavigationController") as! NavigationController

window = UIWindow(frame: UIScreen.main.bounds)
window!.rootViewController = nav
window!.makeKeyAndVisible()
return true

Примечание. Не забудьте указать идентификатор для StoryBoard NavigationController.

...