web-dev-qa-db-ja.com

コードでNavigation Controllerをプログラムで追加し、初期View Controllerとして追加しない方法

私はSwiftとiOSに比較的慣れていないので、私の問題に対する答えやヘルプが見つかりません。

前のビューでボタンをクリックしたときにNavigation Controllerビューを作成したい。私の以前のビューは、最後のページにボタンがあるオンボーディングです。ボタンを次のビューに正常に接続しましたが、ビューをNavigation Controllerのように動作させることはできません。たとえば、ナビゲーションバーが表示されているときに、ナビゲーションアイテムを追加できません。

最初のビューでボタンをクリックして作成した新しいビューを設定して、ナビゲーションビューのルートコントローラーにする方法はありますか?

私のコードの短いバージョン:

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let button = UIButton(frame: CGRect(x: view.frame.width / 2, y: view.frame.height / 2, width: 40, height: 40))
        button.backgroundColor = .red
        button.tintColor = .white
        button.setTitle("Test", for: .normal)
        button.addTarget(self, action: #selector(change), for: .touchUpInside)
        view.addSubview(button)
    }

    func change () {
        let otherView = SecondViewController()
        self.present(otherView, animated: true, completion: nil)
    }

}

class SecondViewController: UINavigationController {

    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = .yellow
    }

}

SecondViewControllerにはナビゲーションバーが表示されますが、ナビゲーションアイテムが表示されないため、実装に問題がありました。

私が提示する2番目のView Controllerは、UIViewControllerまたはUINavigationControllerタイプでなければなりませんか?

ストーリーボードを使用して目標を達成する簡単な方法があることを認識していますが、ストーリーボードからドラッグして作成するのではなく、コードを使用して独自の参照を作成することで、よりよく理解できます。

編集:Objective-Cのバックグラウンドはなく、Swift約4週間学習しています。

14
iOS-Trainee

以下のようにUINavigationControllerを追加できます:

まず、SecondViewControllerのオブジェクトを作成する必要があります。

let objVC: SecondViewController? = storyboard?.instantiateViewController(withIdentifier: "SecondViewController")

または

let objVC: SecondViewController? = SecondViewController(nibName: "SecondViewController", bundle: nil)

または

let objVC: SecondViewController? = SecondViewController()

次に、ナビゲーションをSecondViewControllerに追加します

let aObjNavi = UINavigationController(rootViewController: objVC!)

提示する場合は、次を使用します。

self.present(aObjNavi, animated: true) { 
}

プッシュする場合:

self.navigationController?.pushViewController(aObjNavi, animated: true)

ルートコントローラとして設定する場合は、次を使用します。

let appDelegate: AppDelegate = (UIApplication.shared.delegate as? AppDelegate)!
appDelegate.window?.rootViewController = aObjNavi
44
VRAwesome
var objVC: UIViewController? = storyboard.instantiateViewController(withIdentifier: "ViewController")

var aObjNavi = UINavigationController(rootViewController: objVC)

現在、View Controllerオブジェクトを使用する代わりに、Navigation Controllerオブジェクトを使用します。

1
Arpit Jain