タグ付けされた質問 「uiviewcontroller」

UIViewControllerクラスは、iOSアプリのビューを管理し、アプリのビュー、その基礎となるモデルオブジェクト、および全体的なワークフロー間の相互作用を仲介します。

11
iOS13で検出シートが却下されました
iOS 13より前は、画面全体をカバーするために使用されるビューコントローラーが提示されていました。そして、却下されると、親ビューコントローラviewDidAppear機能が実行されました。 これで、iOS 13はビューコントローラーをデフォルトでシートとして表示します。つまり、カードは基になるビューコントローラーを部分的にカバーします。つまりviewDidAppear、親ビューコントローラーが実際に消えたことがないため、呼び出されません。 提示されたビューコントローラシートが却下されたことを検出する方法はありますか?ある種のデリゲートを使用するのではなく、親View Controllerでオーバーライドできる他の関数?

7
ルートビューコントローラーを取得する方法?
ルートビューコントローラーのインスタンスが必要です。 私はそれらのアプローチを試しました: UIViewController *rootViewController = (UIViewController*)[[[UIApplication sharedApplication] keyWindow] rootViewController]; 戻り値: null: また、コントローラの配列を取得しようとすると: NSArray *viewControllers = self.navigationController.viewControllers; 1つのコントローラーのみを返しますが、ルートビューコントローラーではありません。 ナビゲーションコントローラーから取得しようとした場合: UIViewController *root = (UIViewController*)[self.navigationController.viewControllers objectAtIndex:0]; 戻り値: null: 何かアイデアはありますか?ルートビューコントローラーのインスタンスを取得するために他に何ができるでしょうか? ありがとう。

2
iOS 5でView Controller Containmentはどのように機能しますか?
WWDC 2011のセッション102で、Appleはに類似したカスタムビューコントローラコンテナを作成する機能、あるビューコントローラ封じ込め、導入UITabBarController、UINavigationControllerなどを。 例を何度か見ました。このパターンに関連付けられているメソッドはさまざまですが、正確に把握するのは少し困難でした。私はここで私が起こっていると思うことを投稿し、コミュニティが私の疑いを確認するかどうかを確認します。 シナリオ1:親がない状態から新しい親View Controllerに移動する [vc willMoveToParentViewController:self]; [self addChildViewController:vc]; [self.view addSubview:vc.view]; // or something like this. [vc didMoveToParentViewController:self]; 最初の2行は指定された順序で発生する必要がありますか、それとも逆にすることができますか? シナリオ2:親View Controllerから親View Controllerなしに移動する [vc willMoveToParentViewController:nil]; [vc.view removeFromSuperview]; [vc removeFromParentViewController]; 電話も必要[vc didMoveToParentViewController:nil]ですか?セッション102の例では、このシナリオではこれを行いませんでしたが、それが省略であったかどうかはわかりません。 シナリオ3:ある親View Controllerから別のView Controllerへの移動 各親ビューコントローラーのロジックがカプセル化されるため、これは次のように発生する可能性があります。 // In the old parent [vc willMoveToParentViewController:nil]; [vc.view removeFromSuperview]; [vc removeFromParentViewController]; // In the new parent …

8
タブバー項目のタイトルとは関係なくuiviewcontrollerのタイトルを変更する方法
私はビューコントローラのタイトルをこのように設定していますが、ビューはロードされました: self.title = @"my title"; これに先立って、私はそれが埋め込まれているビューコントローラーとナビゲーションコントローラーのストーリーボードにタイトルを設定しました。 ビューコントローラーを保持するタブをクリックすると、タブバーアイテムのタイトルがuiviewcontroller変更され、次のように変わります。 ビューコントローラを変更したいのですが、タブバーアイテムはタイトルのままにしておきます:タイトル どうすればこれを達成できますか?

3
addChildViewControllerは実際には何をしますか?
私は、iOSの開発に初めて足を浸すことだ、と私はやって持っていた最初のものの一つが実装され、カスタムコンテナビューコントローラを -それを呼び出すことができますSideBarViewController-スワップそれいくつかの可能な子ビューコントローラのどの出ていることは、標準のTab Bar Controllerとほぼ同じです。(これはほとんどタブバーコントローラーですが、タブバーの代わりに非表示のサイドメニューがあります。) Appleのドキュメントの指示に従ってaddChildViewController、子ViewControllerをコンテナに追加するたびに呼び出します。表示されている現在の子ビューコントローラーを交換するための私のコードは、SideBarViewController次のようになります。 - (void)showViewController:(UIViewController *)newViewController { UIViewController* oldViewController = [self.childViewControllers objectAtIndex:0]; [oldViewController removeFromParentViewController]; [oldViewController.view removeFromSuperview]; newViewController.view.frame = CGRectMake( 0, 0, self.view.frame.size.width, self.view.frame.size.height ); [self addChildViewController: newViewController]; [self.view addSubview: newViewController.view]; } それから私addChildViewControllerはここで何をしているのかを理解しようとし始めました、そして私は自分が何も知らないことに気付きました。アレイに新しいものViewControllerを貼り付ける以外に.childViewControllers、何にも影響がないようです。子コントローラーのビューからストーリーボードに設定した子コントローラーへのアクションとアウトレットは、を呼び出さなくても正常に機能しaddChildViewController、他に何が影響するか想像できません。 実際、を呼び出さないようにコードを書き直した場合addChildViewController、代わりに次のようになります... - (void)showViewController:(UIViewController *)newViewController { // Get the current child from a member variable of `SideBarViewController` …

12
presentViewControllerとナビゲーションバーの表示
ビューコントローラーの階層があり、最上位のコントローラーがモーダルとして表示され、使用時にナビゲーションバーを表示する方法を知りたい 'UIViewController:presentViewController:viewControllerToPresent:animated:completion' 「presentViewController:animated:completion:」に関するドキュメントのメモ: 'iPhoneおよびiPod touchでは、表示されるビューは常にフルスクリーンです。iPadでは、プレゼンテーションはmodalPresentationStyleプロパティの値に依存します。 「modalPresentationStyle」の場合、ドキュメントは次のように述べています。 表示スタイルは、モーダルに表示されたビューコントローラが画面に表示される方法を決定します。iPhoneおよびiPod touchでは、モーダルビューコントローラーは常にフルスクリーンで表示されますが、iPadではいくつかの異なる表示オプションがあります。 ビューコントロールが表示されたら、ステータスバーの下にナビゲーションバーが表示されるようにする方法はありますか?ドキュメントを次のように解釈すると、iPhone / iPodのオプションが表示されず、iPadでのみ表示されますか? 以前'UIViewController:presentModalViewController:animated'はうまく機能していたものを使用していましたが、iOS 5.0以降、APIが廃止されたため、新しいAPIに切り替えています。 視覚的には、以前使用していた古いAPIと同じように、画面の下部から新しいコントローラーをスライドさせます。 [コードで更新]: // My root level view: UIViewController *vc = [[RootViewController alloc] initWithNibName:nil bundle:[NSBundle mainBundle]]; navController = [[UINavigationController alloc] initWithRootViewController:vc]; .... // Within the RootViewController, Second view controller is created and added // to the hierarchy. It …

5
transitionWithView内でrootViewControllerを変更するとビューがリークする
メモリリークを調査しているときsetRootViewController:に、遷移アニメーションブロック内で呼び出す手法に関連する問題を発見しました。 [UIView transitionWithView:self.window duration:0.5 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{ self.window.rootViewController = newController; } completion:nil]; 古いビューコントローラー(置き換えられるビューコントローラー)が現在別のビューコントローラーを提示している場合、上記のコードは提示されたビューをビュー階層から削除しません。 つまり、この一連の操作... Xがルートビューコントローラーになる XはYを表すので、Yのビューは画面上に表示されます を使用transitionWithView:してZを新しいルートビューコントローラにする ...ユーザーには問題ないように見えますが、Debug View Hierarchyツールは、YのビューがZのビューの背後、つまり内にまだあることを明らかにしUITransitionViewます。つまり、上記の3つのステップの後、ビューの階層は次のようになります。 UIWindow UITransitionView UIView(Yのビュー) UIView(Zのビュー) 移行時に、Xのビューは実際にはビュー階層の一部ではないため、これは問題だと思います。 のdismissViewControllerAnimated:NO直前にX に送信するtransitionWithView:と、結果のビュー階層は次のようになります。 UIWindow UIView(Xのビュー) UIView(Zのビュー) dismissViewControllerAnimated:X に送信(YESまたはNO)した場合、completion:ブロックで遷移を実行すると、ビュー階層が正しくなります。残念ながら、それはアニメーションを妨害します。解雇をアニメーション化する場合、それは時間を浪費します。アニメーション化しないと、壊れているように見えます。 私は他のいくつかのアプローチ(たとえば、ルートビューコントローラーとして機能する新しいコンテナービューコントローラークラスを作成する)を試していますが、機能するものは何も見つかりません。この質問は随時更新していきます。 最終的な目標は、提示されたビューから新しいルートビューコントローラーに直接移行することです。


16
Swiftでのみ1つのビューコントローラーの向きを縦向きモードにロックする方法
私のアプリはすべての向きのサポートを得たので。ポートレートモードのみを特定のUIViewControllerにロックしたいと思います。 たとえば、それがタブ付きアプリケーションであり、サインインビューがモーダルに表示されている場合、ユーザーがデバイスをどのように回転させるか、または現在のデバイスの向きがどうであっても、サインインビューを縦向きモードにしたいだけです

7
Container View Controllerの例[終了]
閉まっている。この質問はスタックオーバーフローのガイドラインを満たしていません。現在、回答を受け付けていません。 この質問を改善してみませんか?Stack Overflowのトピックとなるように質問を更新します。 4年前休業。 この質問を改善する カスタムビューコントローラーをコンテナービューコントローラーとして作成する良い例を誰かに教えてもらえますか?私が見つけることができる唯一のドキュメントは、UIViewController Class Referenceのいくつかの段落です。それよりも少し多くの情報が必要だと思います。実装例はいいでしょう。グーグルはまったく何も上げていません。 私は特に方法に興味があります: transitionFromViewController:toViewController:duration:options:animations:completion:

8
presentViewController:animated:YESビューは、ユーザーがもう一度タップするまで表示されません
で奇妙な動作が発生していpresentViewController:animated:completionます。私が作っているのは、本質的に推測ゲームです。 私が持っているUIViewController(frequencyViewController)を含むUITableView(frequencyTableViewを)。ユーザーが正解を含むquestionTableViewの行をタップすると、ビュー(correctViewController)がインスタンス化され、そのビューがモーダルビューとして画面の下から上にスライドするはずです。これは、ユーザーに正しい答えがあることを知らせ、次の質問に備えて、その背後にあるfrequencyViewControllerをリセットします。ボタンを押すと、次の質問を表示するためにcorrectViewControllerが閉じます。 これはすべて正しく機能し、正しいビューコントローラのビューはがある限り即座に表示されpresentViewController:animated:completionますanimated:NO。 設定するとanimated:YES、correctViewControllerが初期化され、を呼び出しますviewDidLoad。しかしviewWillAppear、viewDidAppear、およびから完了ブロックがpresentViewController:animated:completion呼び出されません。アプリはそこに座って、2回目のタップを行うまでfrequencyViewControllerを表示しています。これで、viewWillAppear、viewDidAppear、および完了ブロックが呼び出されます。 私はもう少し調査しました、そしてそれがそれを続けることを引き起こすもう一つのタップではありません。iPhoneを傾けたり振ったりすると、viewWillLoadなどがトリガーされる可能性があります。他のユーザー入力を待ってから進行するようです。これは、実際のiPhoneとシミュレーターで発生します。これは、shakeコマンドをシミュレーターに送信して確認しました。 私はこれについて何をすべきかについて本当に途方に暮れています...私は誰もが提供できるあらゆる助けに本当に感謝します。 ありがとう これが私のコードです。とてもシンプルです... これは、questionTableViewのデリゲートとして機能するquestionViewControllerのコードです。 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.row != [self.frequencyModel currentFrequencyIndex]) { // If guess was wrong, then mark the selection as incorrect NSLog(@"Incorrect Guess: %@", [self.frequencyModel frequencyLabelAtIndex:(int)indexPath.row]); UITableViewCell *cell = [self.frequencyTableView cellForRowAtIndexPath:indexPath]; [cell setBackgroundColor:[UIColor colorWithRed:240/255.0f green:110/255.0f blue:103/255.0f alpha:1.0f]]; } else …

5
SwiftでUIViewControllerサブクラスのカスタム初期化子を作成するにはどうすればよいですか?
これが以前に尋ねられたことがある場合はお詫びします。私は何度も検索しましたが、多くの答えは、物事が異なっていた初期のSwiftベータ版からのものです。決定的な答えを見つけることができないようです。 UIViewControllerコードで簡単に設定できるように、サブクラス化し、カスタム初期化子を用意します。Swiftでこれを行うのに問題があります。 ビューコントローラーで使用init()する特定の関数を渡すために使用できる関数が必要ですNSURL。私の心の中でそれは次のように見えますinit(withImageURL: NSURL)。その関数を追加すると、init(coder: NSCoder)関数を追加するように求められます。 これは、スーパークラスでrequiredキーワードが付けられているためだと思いますか?だから私はサブクラスでそれをしなければならないのですか?私はそれを追加します: required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } それで?私の特別な初期化子はconvenience1つと見なされますか?指定されたもの?スーパー初期化子を呼び出しますか?同じクラスのイニシャライザ? 特別な初期化子をUIViewControllerサブクラスに追加するにはどうすればよいですか?


21
埋め込みナビゲーションコントローラーを使用したポップオーバーでバックナビゲーションのサイズが考慮されない
ビューコントローラーの小さな階層を含むUINavigationControllerをホストしているUIPopoverControllerがあります。 私はドキュメントに従い、ビューコントローラーごとに、ビューのポップオーバーコンテキストのサイズを次のように設定しました: [self setContentSizeForViewInPopover:CGSizeMake(320, 500)]; (サイズはコントローラーごとに異なります) これは、私が階層内を進んでいくときに期待どおりに機能します。ポップオーバーは、プッシュされたコントローラーに対応するようにサイズ変更を自動的にアニメーション化します。 ただし、ナビゲーションバーの[戻る]ボタンを使用してビュースタックを「戻る」にナビゲートすると、ポップオーバーのサイズは変更されず、最も深いビューに到達したときと同じ大きさのままになります。これは私には壊れているようです。私はポップオーバーがビュースタックをポップするときに設定されるサイズを尊重することを期待します。 何か不足していますか? ありがとう。

12
ストーリーボードでインターフェースを設定したSwiftのUIViewControllerのカスタム初期化
UIViewControllerのサブクラスのカスタムinitの記述に問題があります。基本的に、プロパティを直接設定するのではなく、viewControllerのinitメソッドを介して依存関係を渡したいです。 viewControllerB.property = value そこで、viewControllerのカスタムinitを作成し、スーパー指定のinitを呼び出しました。 init(meme: Meme?) { self.meme = meme super.init(nibName: nil, bundle: nil) } ビューコントローラーインターフェイスはストーリーボードにあります。カスタムクラスのインターフェイスもビューコントローラーにしました。また、このメソッド内で何もしていない場合でも、Swiftはこのinitメソッドを呼び出す必要があります。そうでなければ、コンパイラは文句を言うでしょう... required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } 問題は、カスタムinitを呼び出そうとするとMyViewController(meme: meme)、viewControllerのプロパティがまったく初期化されないことです... 私はデバッグしようとしていましたが、viewControllerでinit(coder aDecoder: NSCoder)最初に呼び出され、次にカスタムinitが後で呼び出されました。ただし、これら2つのinitメソッドは異なるselfメモリアドレスを返します。 私は自分のViewControllerのためのinitで何かを間違っを疑っていて、それが常に返されますselfとinit?(coder aDecoder: NSCoder)、何の実装を持ちません、。 viewControllerのカスタムinitを正しく作成する方法を知っている人はいますか?注:私のviewControllerのインターフェースはストーリーボードで設定されています これが私のviewControllerコードです: class MemeDetailVC : UIViewController { var meme : Meme! @IBOutlet weak var editedImage: UIImageView! // …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.