1

ここに画像の説明を入力してください スタックの最上位にあるUINavigationControllerからUINavigationControllerのbackBarButtonItemへの参照を取得するにはどうすればよいですか。状況によっては、ネットワークコードが完了するまで戻ることを無効にしたい場合があります。

self.parentViewController.navigationItem.backBarButtonItem.target = self; self.parentViewController.navigationItem.backBarButtonItem.action = @sel...;

デリゲートメソッドが機能しない

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item

どちらも機能しません。

4

1 に答える 1

1

答えと推奨事項:

答え:MVCモデルを少し変更して、ネットワークアクティビティが実行されたかどうかに応じてモデルのBOOLプロパティがオンまたはオフになるようにしてから、QuestionsVCで採用されたデリゲート/プロトコルを使用して戻るボタンの設定を更新することをお勧めしますそのプロパティが変更されると。QuestionsVCのdelegateメソッドに以下を追加する必要があります。

[self.tabBarController.navigationItem setHidesBackButton:YES animated:YES];

私はそれをテストしました、そしてそれは働きます。

推奨事項:UINBavigationController内にUITabBarControllerを含めることは決して推奨されません(逆のみが推奨されます)。プロジェクトに深く入り込む前に、それに応じて調整します。

更新:必要に応じて「開始」するボタンを備えたスタートアップVCとしてのmainVCの必要性を理解できます。ストーリーボードでVCをプッシュ/ポップしてセグエを使用するには、NavControllerが必要です。ただし、VCのシーケンスを表示する方法はこれだけではありません。VCを表示/非表示にすることができます。だからあなたの場合:

1-最初のNavControllerを削除します

2- NavControllerの左側にある矢印をMainVCの左側に移動して、MainVCを開始VC(エントリポイント)にします。

3- Nav ControllerなしではSBでセグエを使用できないため、メインVCをTabBarコントローラーから切断します(そのリンクを削除します)。そのタブバーコントローラーをインスタンス化して表示する必要があります。

4-新しいオブジェクトファイル(.m / .h)を追加します-UITabBarControllerのサブクラスであり、IBのtabBarControllerのクラスをサブクラスの名前に変更します。IBのクラスリストのドロップダウンにxcodeが表示されない場合は、xcodeをビルド/クリーンアップまたは再起動する必要がある場合があります。

5- mainVCでIBActionメソッドを作成し、それをMainVCのボタンにリンクします。

6-そのメソッド(メインVC内)に、次のコードを追加します。

yourTabBarControllerSubClassName*  myTabController= [self.storyboard instantiateViewControllerWithIdentifier:@"theTab"];
[self presentViewController:myTabController animated:YES completion:nil];

7- SBでタブバーコントローラーを選択し、IDインスペクターで、SB IDを「theTab」として入力し、「useSBID」にチェックを入れていることを確認します。

8-質問VCまたはステータステーブルVCのそれぞれに一連のVCがある場合は、各VCをナビゲーションコントローラーに埋め込むことができます。これで問題ありません。

その場合、その戻るボタンはもう存在しないので、心配する必要はないかもしれません。

幸運を

お役に立てれば。

于 2013-03-03T23:10:00.693 に答える