問題タブ [uinavigationcontroller]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
iphone - プッシュされたビューコントローラを「適切に」リリースするとiPhoneがクラッシュする
ナビゲーションコントローラーベースのアプリケーションを使用していますが、ビューコントローラーのプッシュのいくつかがビューコントローラーの「ポップ」時にクラッシュを引き起こすという奇妙な問題が発生しています。
ナビゲーションコントローラーのスタックにプッシュした後にViewControllerを解放するコード行に絞り込みました。
私のコードは次のようになります。
これは適切なメモリ管理コードですが、残念ながら「インスタンス0x .....にダブルフリー送信」エラーが発生し、アプリがクラッシュします。これは通常、ビューコントローラをポップしたときに発生します。
私は何を見るべきかについての提案を探しています。私は立ち往生しています。
前もって感謝します。
編集:これは、以下のLouisによって提案されたスタックトレースダンプの結果です。
最初のリリースでは、保持カウントは13です(CocoaTouch基本クラスの深いコードが原因だと思います)。最終的にそれはこれに帰着します:
#object = 0xd09070
上記の問題のある行を省略した場合([viewControllerリリース];)、保持カウントは2になり、インスタンスの割り当てが解除されることはありません。
iphone - UINavigationItem setHidesBackButton:YESは戻るのを妨げません
奇妙なことですが、ビューに関連付けられたUINavigationItemに対してhidesBackButtonをYESと指定した場合でも、戻るボタンであるはずの領域に触れるだけで戻ることができます。
私のソリューションを共有しています...(今後さらに)
iphone - ビューの強制ロード/アンロード
ビューのフィールドのみを更新するようにビュー コントローラーを設定するには、ナビゲーション コントローラーにプッシュされ、ナビゲーション コントローラー ビューからポップされたときにオブジェクトを解放する方法を教えてください。
私の目標は、View Controller の場合です。
- ナビゲーション コントローラー スタックでプッシュされた場合にのみ表示を更新する
- ナビゲーション コントローラ スタックからポップされるときにデータを解放します
- コントローラーを可能な限り再利用します (xib ファイルのロード/アンロードのオーバーヘッドをなくすため)
とのデリゲート メソッドはviewWillBePushed:
ありviewWillBePopped:
ますか?
例
ビューの3つのレイヤーがあるとしましょう:
Movie
各映画を表すクラスがあるとします。
ここでUIViewController
は、プログラムの実行時にそれぞれ 1 つのインスタンスである 3 つの のみが必要です。したがって、同じMovieInfoController
ものを別の映画や同様に再利用できMovieCreditsController
ます。
MovieInfoController
ただし、スタックにプッシュされたときにのみ、ビュー フィールド (タイトル、リリース日など) のみを更新したいと思います。で表示を実装すると、がポップviewWillAppear
された場合でも、強制的にフィールドが更新されます。MovieCreditsController
また、ポップされたとき、および潜在的に大きなオブジェクト (カバー画像など)へのMovieInfoController
参照を解放したいと考えています。Movie
このロジックを実装すると、スタックにviewWillDisappear
プッシュするときにデータが解放されます。MovieCreditsController
合理性はありますか?私はそれについて間違った方法で進んでいますか?
iphone - 最適な titleView 幅を計算するにはどうすればよいですか?
UIView
titleView になるカスタム サブクラスでナビゲーションを使用しています。これが利用可能な全幅であることを確認したいと思います。
UIViewController
私のから論理的にはviewWillAppear:
、これは次のようになります。
(ここには適切なアイテムがありません。)
これは、 のさまざまな可能な幅に適応しleftBarButtonItem
ます。キャッチは、つまりleftBarButtonItem
ですnil
ので、leftBarButtonItem.width
常に 0 です (とにかく、シミュレーターでは)。
backBarButtonItem
もゼロです。
代わりに何をすべきですか?
iphone - 詳細ビューに切り替えるときにUILabel.textを複数回変更することはできません
テーブルの行を選択すると、navControllerのスタックに詳細ビューがプッシュされ、選択した行に関する詳細情報が表示されるように、navControllerとtableViewControllerを設定しています。詳細ビューでは、単一のUILabelを使用して情報を表示し、詳細ビューコントローラーのviewDidLoadでラベルのtextプロパティの値を設定します。
初めて行を選択すると、詳細ビューに期待されるテキストが表示されます。テーブルビューに戻って別の行を選択すると、詳細ビューに最初と同じテキストが表示されます。
詳細ビューコントローラーが解放され、navControllerのスタックにプッシュされた後にnilに設定されるコードサンプルをいくつか見ました。それをコードに追加すると、問題は解決しますが、理由がわかりません。
誰かがここで何が起こっているのか私に説明できますか?
ありがとう!
iphone - UITabBarControllerUINavigationController設計アドバイス
これは何よりも哲学的な質問ですので、私にあなたの考えを教えてください。
iPhone SDKのドキュメントでは、タブバーコントローラーにナビゲーションコントローラーを含めることができると指定されていますが、ナビゲーションコントローラーにタブバーコントローラーを含めることはできません。ナビゲーションコントローラースタックの一部であるビュー内のビューを表形式で整理したい場合があるようです。これは無理ですか?
私は、HIGが最も抵抗の少ない道を明らかにしているように見えるベストプラクティスを提供しているのと同じように、Appleがこれらの分野で指示することを福音として受け入れます(それには例外があると確信しています)。ただし、タブバーの場合、その背後にある設計上の理由はわかりません。他の人には明らかかもしれませんが、ルートレベルのビューコントローラ以外のタブを許可しない理由は考えられません。
みなさんはどう思いますか/知っていますか?これによりどのような設計上の欠陥が生じますか?ビュー内のビューを表形式で表示する必要があるというこの問題をどのように解決しますか?デザイン全体を再考する必要がありますか?
ありがとう。
objective-c - Mobile Safari に似たスクロール可能な UINavigationBar
私のアプリケーションは を使用してUINavigationController
おり、最終ビュー (詳細ビュー) では、 を使用してアプリケーション内で外部 Web サイトを表示できますUIWebView
。
ユーザーが Web ページを表示しているときに追加の画面領域を解放したいと考えており、コンテンツを表示しているときに上部の URL バーがスクロールアップして画面から消える iPhone の Safari の動作をエミュレートしたいと考えていますUIWebView
。フォールドの下。
これを達成する方法について誰にもアイデアがありますか? プロパティを設定しnavigationBarHidden
、独自のカスタム バーを上部にロールして設定すると、UIWebView
他のスクロール可能なビューではうまく再生されないためUIScrollView
、スクロールの問題が発生します。UIWebView
iphone - カスタムUITableViewCell内からモーダルウィンドウを呼び出す
UITableViewがあり、その中に次の方法でカスタムUITableViewCellを作成します。
これは、touchesBeganイベントとtouchesEndedイベントを取得できるようにするために行います(これにより、ロングタッチを実装できます)。NSLogを使用すると、次のコードを使用して、touchesBeganメソッド内からlongTouchが適切に呼び出されていることがわかります。
問題は、longTouchメソッド内からモーダルウィンドウを呼び出すことができないことです。
次のことを試しましたが、NSInvalidArgumentException-[ItemCellController NavigationController]:認識されないセレクターがインスタンスに送信されましたエラーが発生します。
したがって、問題は、カスタムUITableViewCell内からモーダルウィンドウを呼び出すにはどうすればよいかということです。
ありがとう
iphone - rootViewController を UINavigationController に追加する際の問題
次のコードに問題があります。
プログラムを実行すると、myController のビューが y 軸に沿って画面の下部まで繰り返されるという問題が発生します。myController.view をルート ビューに追加すると、問題なく動作します。ナビゲーション コントローラーの rootViewController として myController を追加した場合にのみ問題が発生します。
助けてくれてありがとう!
iphone - UINavigation を UIToolbar に置き換えますか?
ナビゲーション ベースのアプリを作成しましたが、コードに深く入り込んだので、代わりに UIToolbar だけを使用するのが実際には最善であると判断しました (ドリルダウンではなく、モーダル ビューのみが必要です)。しかし、ナビゲーションを解放してツールバーに置き換えると、あらゆる種類の悲しみが生じます...
誰かがこれをやったことがありますか?おそらくポインタを1つか2つ持っていますか? または、どこかにリンクされているウォークスルーを知っていますか?
ありがとう!