0

章を表すセクションと詩を表す行を含む本を記述する TableView があります。

このTableViewの上部には、ナビゲーションバーに「ナビゲーション」を許可するボタンがあります。

このナビゲーション ボタンの目的は、ユーザーが手動でスクロールする (非常に長くなる可能性がある) ことなく、特定の章/節に簡単にジャンプできるようにすることです。

ボタンが押されると、tableview コントローラーが呼び出され、本の利用可能なすべての章が表示されます。章が選択されると、別のテーブル ビューが呼び出され、現在の章で利用可能な節のリストが表示されます。最後に、行が選択されると、本を表示する tablew ビューが指定されたインデックス/行までスクロールする必要があります。

だからアイデア:本を表すテーブルビューから、私はチャプタービューをモーダルと呼び、詩をチャプタービューのプッシュと呼びます。

ここに画像の説明を入力

私の問題は、デリゲートを管理して 2 番目のモーダル ビューを閉じるという点が理解できないことです。

1つのモーダルビューで私はそのようなことをします.

表示された VC (View Controller) に、プロトコルとデリゲートを追加しました

@protocol ChapitresTableViewControllerDelegate <NSObject>
- (void)didDismissPresentedViewController;
@end

@interface ChapitresTableViewController : UITableViewController
@property (nonatomic, weak) id <ChapitresTableViewControllerDelegate> delegate;
@end

私はdidSelectRowにいます

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self.delegate didDismissPresentedViewController];
}

表示されているVCに次の行を追加します

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
  ChapitresTableViewController *chapitresTableViewController = segue.destinationViewController;
  chapitresTableViewController.delegate = self;
}

そしてもちろん

-(void)didDismissPresentedViewController
{
    [self dismissViewControllerAnimated:YES completion:nil];
}

最初のモーダル VC の後に閉じたい場合、これは問題なく機能しますが、2 番目のモーダル VC をクリックした後に 2 番目の VC を閉じたいと思っています。2 番目のモーダル VC にプロトコルなどを記述できますが、デリゲートを 2 番目の VC に送信するにはどうすればよいですか。

私の質問が十分に明確であることを願っています。説明するのは簡単ではありません。

誰でも私を理解し、私を助けることができますか?

: 今のところ、パラメーターをデリゲートに戻していないことはわかっています。これは、後でスクロールを行うために行います。今のところ、2 番目のビューを閉じたいだけなので、必要なものを追加してパラメーターをデリゲートに戻します。

4

1 に答える 1

1

これはできると思いますが、ナビゲーション バー付きのモーダル ビュー コントローラーよりも、ナビゲーション コントローラーを使用した方が簡単ではないでしょうか。次にpopToViewController、特定のView Controllerに必要なだけレベルを戻すために使用できます。UIViewController*ポップしたいさまざまなコントローラーの を渡すか、プログラムで渡すことができます

このシナリオでは、以前のビュー コントローラーが保持されます。ポップオフしたものは解放されます (却下したモーダルが解放されるのと同じように) が、プッシュしたものは保持されます (モーダルの世界で提示したものが保持されるのと同じように)。

ただし、ブックが大きい場合は、メモリの使用量に注意する必要があります。したがって、おそらくdidReceiveMemoryWarning、モーダル シーケンスまたはプッシュ シーケンスのいずれかで、前のビューのモデル データを解放するために処理する必要がありviewDidAppearます。didReceiveMemoryWarningその場合はリロードしてください。いずれにせよ、それは望ましい動作です。必要に応じてページを適切に解放し (特定のビューが再表示されたときに再読み込みします)、可能であればメモリに保持します。

最後に、 の使用を検討することもできますUIPageViewController。あなたが説明したことを考えると、UIPageViewController最初に検討し、次にUINavigationControllerセグエをプッシュし、モーダルセグエを3番目に使用したいと思います。

于 2012-11-15T16:09:24.560 に答える