リンク先のサンプルを作成しました。
画面遷移メソッド
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
などで、
データを渡すプログラムはありますが、文字を渡す事が出来れば、遷移先で対応できるので、作成しました。
Storyboard経由で、遷移先に文字データを渡すプログラムです。
呼び先
UIViewController uIStoryboard(name: "NextController", vc: self,title: "test") UINavigationViewController uINavigationStoryboard(name: "NextController", vc: self, title: "test")
push遷移
pushUIStoryboard(name: "NextController", vc: self,title: "test")
遷移先
// navigationControllerの場合 // segueName = navigationController?.title segueName = title print(segueName ?? "", "segueName") 結果 test segueName
実施していること UIResponderの拡張クラスを作成しています。
https://developer.apple.com/documentation/uikit/uiresponder
UIResponderとは
レスポンダーオブジェクト(つまり、UIResponderのインスタンス)は、UIKitアプリのイベント処理バックボーンを構成します。 UIApplicationオブジェクト、UIViewControllerオブジェクト、およびすべてのUIViewオブジェクト(UIWindowを含む)など、多くのキーオブジェクトもレスポンダーです。イベントが発生すると、UIKitはそれらをアプリのレスポンダーオブジェクトにディスパッチして処理します。 タッチイベント、モーションイベント、リモートコントロールイベント、プレスイベントなど、いくつかの種類のイベントがあります。特定のタイプのイベントを処理するには、レスポンダーが対応するメソッドをオーバーライドする必要があります。たとえば、タッチイベントを処理するために、レスポンダーはtouchesBegan(_:with :)、touchesMoved(_:with :)、touchesEnded(_:with :)、およびtouchesCancelled(_:with :)メソッドを実装します。タッチの場合、レスポンダーはUIKitによって提供されるイベント情報を使用して、それらのタッチへの変更を追跡し、アプリのインターフェースを適切に更新します。 UIKitレスポンダーは、イベントの処理に加えて、未処理のイベントのアプリの他の部分への転送も管理します。特定のレスポンダがイベントを処理しない場合、レスポンダチェーン内の次のイベントにそのイベントを転送します。 UIKitは、事前に定義されたルールを使用してレスポンダーチェーンを動的に管理し、イベントを受信する次のオブジェクトを決定します。たとえば、ビューはイベントをスーパービューに転送し、階層のルートビューはイベントをビューコントローラーに転送します。 レスポンダーはUIEventオブジェクトを処理しますが、入力ビューを介してカスタム入力を受け入れることもできます。システムのキーボードは、入力ビューの最も明らかな例です。ユーザーが画面上のUITextFieldおよびUITextViewオブジェクトをタップすると、ビューが最初のレスポンダーになり、入力ビュー(システムキーボード)が表示されます。同様に、カスタム入力ビューを作成し、他のレスポンダーがアクティブになったときに表示することができます。カスタム入力ビューをレスポンダーに関連付けるには、そのビューをレスポンダーのinputViewプロパティに割り当てます。 レスポンダーとレスポンダーチェーンの詳細については、UIKitアプリのイベント処理ガイドを参照してください。
Storyboardを経由して、遷移先に文字を渡すプログラム
extension UIResponder { ViewControllerの遷移 func uIStoryboard(name: String, vc: UIViewController, title: String? = nil) { let storyboard: UIStoryboard = UIStoryboard(name: name, bundle: nil) let next = storyboard.instantiateInitialViewController() ?? UIViewController() next.title = title vc.present(next, animated: true, completion: nil) } Navigationの遷移 func uNavigationStoryboard(name: String, vc: UIViewController, title: String? = nil) { let storyboard: UIStoryboard = UIStoryboard(name: name, bundle: nil) let vcs = storyboard.instantiateInitialViewController() ?? UIViewController() let navi = UINavigationController(rootViewController: vcs) navi.title = title vc.present(navi, animated: true, completion: nil) } push遷移 func pushUIStoryboard(name: String, vc: UIViewController, title: String? = nil) { let storyboard: UIStoryboard = UIStoryboard(name: name, bundle: nil) let next = storyboard.instantiateInitialViewController() ?? UIViewController() next.title = title vc.navigationController?.pushViewController(next, animated: true) }
コメントを残す