ナビゲーションアイテム(スクリーンショットの右側のビュー)を使用してモーダルビューを作成し、「戻るボタン」を設定したいと思います。私のアプリはTabBarアプリケーションであり、このビューにタブバーを付けたくありませんが、「push」タイプに似たセグエを使用して前のビュー(スクリーンショットの左側のビュー)をロードしたいと思います。プッシュセグエを作成して、右側のナビゲーションを左側のビューに戻すことしかできません。モーダルビューとして読み込まれると、NavigationBarとTabBarはなくなります。これに対する回避策はありますか?前もって感謝します!
2 に答える
バーボタンアイテムを使用して、新しいビューにナビゲーションバーを配置するだけです。バーボタンアイテムからViewControllerの.hへのドラッグを制御して、バーボタンアイテムのアクションを作成します。次に、デリゲートとプロトコルの方法を使用して、ボタンが押されたときに最初のコントローラーに通知し、それを使用させることができます。[self dismissModalViewControllerAnimated:YES];
したがって、2番目のビューでは、次のようなメソッドを実行してプロトコルを作成します。
@protocol SecondViewControllerDelegate <NSObject>
-(void) done;
@end
@interface SecondViewController : UIViewController {
...
id delegate;
}
...
@property (nonatomic, assign) id<SecondViewControllerDelegate> delegate;
-(IBAction)done:(id)sender; //this will be linked to your nav bar button.
@end
次に、ボタンからのアクションでこれを呼び出します。
-(IBAction)done:(id)sender{
[self.delegate done];
}
最初のViewControllerはプロトコルを実装する必要があります<SecondViewControllerDelegate>
次に、最初のView Controllerで、セグエする前に2番目のViewControllerのデリゲートとして設定します。
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([[segue identifier] isEqualToString:@"Second View Modal Segue Identifier"])
{
SecondViewController *viewController = segue.destinationViewController;
viewController.delegate = self;
}
}
最後に、最初のViewControllerでデリゲートからの完了した呼び出しをキャッチします。
-(void) done
{
[self dismissModalViewControllerAnimated:YES];
}
それが私がやった方法です。プロトコルとデリゲートの経験があまりない場合、最初は混乱するように思われるかもしれませんが、私にとってはうまくいきました。
右側のサイドビューコントローラーを新しいナビゲーションコントローラーでラップする必要があります。IBでそれを選択し、メニュー項目を選択するとEditor -> Embed In -> Navigation Controller
、IBにナビゲーションバーが表示され、心ゆくまでカスタマイズできます。