Почему это не открывает окно контроллера навигации? - PullRequest
0 голосов
/ 26 июня 2018

Почему следующий код не открывает навигационный контроллер при нажатии на кнопку камеры?Выполненная функция указывает, что камера должна выдвигать контроллер вида, но ничего не происходит.

func setNavigationBar() {
    let screenSize: CGRect = UIScreen.main.bounds
    let navBar = UINavigationBar(frame: CGRect(x: 0, y: 20, width: screenSize.width, height: 160))
    let navItem = UINavigationItem(title: "Hello")
    let doneItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.camera, target: nil, action: #selector(done))
    navItem.rightBarButtonItem = doneItem
    navBar.setItems([navItem], animated: false)
    self.view.addSubview(navBar)
}

@objc func done() { // remove @objc for Swift 3
    let dummyViewController = UIViewController()
    navigationController?.pushViewController(dummyViewController, animated: true)
}

Это AppDelagate:

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?


func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions:

    [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    Thread.sleep(forTimeInterval: 2.0)
    FirebaseApp.configure()

    window = UIWindow(frame: UIScreen.main.bounds)
    window?.makeKeyAndVisible()

    window?.rootViewController =
        UINavigationController(rootViewController: MessagesController())
    UITableViewCell.appearance().textLabel?.textColor = UIColor.white;
    UITableViewCell.appearance().backgroundColor = UIColor.clear
    UIApplication.shared.statusBarStyle = .lightContent
    UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor : UIColor.white]
    UINavigationBar.appearance().barTintColor = UIColor(red:0.13, green:0.15, blue:0.18, alpha:1.0)

    UIApplication.shared.isStatusBarHidden = false






    return true

}


func applicationWillResignActive(_ application: UIApplication) {
    let im = UIImageView()

    im.tag = 12

    im.frame = (self.window?.frame)!

    im.image = UIImage.init(named: "launchbackground.png")

    application.keyWindow?.subviews.last?.addSubview(im)
}

func applicationDidEnterBackground(_ application: UIApplication) {
    let im = UIImageView()

    im.tag = 12

    im.frame = (self.window?.frame)!

    im.image = UIImage.init(named: "launchbackground.png")

    application.keyWindow?.subviews.last?.addSubview(im)
}

func applicationWillEnterForeground(_ application: UIApplication) {
    if let sub = application.keyWindow?.subviews.last
    {
        for vv in sub.subviews
        {
            if(vv.tag == 12)
            {
                vv.removeFromSuperview()
            }

        }

    }

}


func applicationDidBecomeActive(_ application: UIApplication) {
    if let sub = application.keyWindow?.subviews.last
    {
        for vv in sub.subviews
        {
            if(vv.tag == 12)
            {
                vv.removeFromSuperview()
            }

        }

    }


}

func applicationWillTerminate(_ application: UIApplication) {
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}




}

Есть ли что-нибудь еще, что я могудобавьте или удалите, чтобы помочь решить эту проблему, любые предложения приветствуются.

ОБНОВЛЕНИЕ:

Так что в основном у меня есть контроллер корневого представления, который отображается только после того, как пользовательвошел в систему. Перед тем как пользователь вошел в систему, ему предоставляется другой контроллер представления, который я пытаюсь построить прямо сейчас;этот контроллер представления является страницей регистрации, для которой мне нужно иметь панель навигации вверху с опцией «Войти». План состоял в том, чтобы пользователь мог нажать на элемент управления навигацией «Логин» и быть представлен с контроллером навигации (который поставляетсясправа), который отображает форму входа.

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Если вы просто пытаетесь поместить кнопку камеры в панель навигации, чтобы нажать другой контроллер вида, есть более простой способ сделать это:

func setNavigationBar() {

    let saveButton = UIBarButtonItem(barButtonSystemItem: .camera, target: self, action: #selector(done))
    navigationItem.rightBarButtonItem = saveButton
}

@objc func done() { // remove @objc for Swift 3
    let dummyViewController = UIViewController()
    navigationController?.pushViewController(dummyViewController, animated: true)
}

РЕДАКТИРОВАТЬ

Итак, если я правильно понимаю, вы представляете контроллер представления страницы регистрации, и вам нужна навигационная кнопка для перехода к следующему представлению, верно?Возможно, проблема в том, как вы «представляете» этот контроллер представления.Если вы используете метод present (_: animated: complete :), представление будет представлено модально, что означает, что у него не будет ни контроллера навигации, ни панели навигации.

Чтобы решить эту проблему, вы можете создать UINavigationController, установив страницу регистрации в качестве rootViewController, и вместо этого представить контроллер навигации.

Попробуйте это:

let registerViewController = RegisterViewController()
let registerNavigationController = UINavigationController(rootViewController: registerViewController)
currentViewController.present(registerNavigationController, animated: true)
0 голосов
/ 26 июня 2018

Проблема в том, что эта строка:

let doneItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.camera, target: nil, action: #selector(done))

Цель должна быть self not nil .

let doneItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.camera, target: self, action: #selector(done))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...