2

Objective-C では

文字列からクラスを作成し、そのオブジェクトを初期化して、次のようにナビゲーション スタックにプッシュできます。

Class myClass = NSClassFromString("ClassString");
id myObject = [[myClass alloc] initWithNibName:"ClassString" bundle:nil];
[self.navigationController pushViewController:myObject animated:YES];

swift で同等のコードは何でしょうか?

Swiftで試しました:

let ClassName = NSClassFromString("ClassString")
let myObject = ClassName.init(... ) // <- here I'm unable to init with nib name

ここに画像の説明を入力

NSClassFromString から作成されたクラスでオブジェクトを初期化するにはどうすればよいですか?

アップデート

Martin のコメントのリンクの助けを借りて、Nib/XIB の問題を解決できました。しかし、ストイボードの場合はどうすればよいのでしょうか?

let mainStoryboard:UIStoryboard = UIStoryboard.init(name: "Main", bundle: nil)
let myVC = mainStoryboard.instantiateViewController(withIdentifier: "SomeID") as ClassName // <- here I'm getting error
self.navigationController.pushViewController(myVC, animated: true)

ここに画像の説明を入力

更新 2

行から「as ClassName」を削除してみましたが、正常に機能しています。現在、nib とストーリーボードを使用したビュー コントローラーのプッシュは完了しています。今、私はそれを両方なしで、またはフレーム付きでプッシュしたいと考えています。

このコードは問題ありませんが、プッシュされると、空白で黒く表示されます。

let myVC = ClassName.init()
self.navigationController?.pushViewController(myVC, animated: animate)

解決策は何ですか?フレームで初期化する場合、この場合、どうすればそれを達成できますか?

上記のすべての条件は、viewcontroller のプッシュ/ポップ操作用に 1 つの関数を実装したいため、チェックしています。

ありがとう!

4

0 に答える 0