2

ポップオーバーコントローラーによって提示された場合にのみキーボードが表示されるときに、モデルテーブルビュー (UITableViewController) がテーブルをスクロールしない理由は何ですか?

私は基本的に、モデルのTableview全画面表示を開くボタンを備えたポップオーバーメニューを持っています。テーブルの下部にある行内のテキストフィールドは、タップするとキーボードによって非表示になります。

これは、スクロールを手動で管理する必要がある UIView または Scrollview とは異なります。UITableViewController にはこの機能が組み込まれていますが、階層のどこかにポップオーバー コントローラーがある場合は機能しません。

サンプル プロジェクト: www.geoffcoope.co.uk/ios/testTVCScrolling.zip

ありがとうジェフ

4

2 に答える 2

1

あなたの問題は、ストーリーボードのセグエがポップオーバーコントローラーを表示する方法にあると思います。一般的な問題のようです。

したがって、これを解決する最も簡単な方法は、モーダルウィンドウの作成をコード内に移動することです。そんな感じ:

あなたのViewController.h書き込みの中に

@property (strong) UIPopoverController * popoverController;
- (void) showNavigationController;

あなたのViewController.m書き込みの中に

@synthesize popoverController;

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    [super prepareForSegue:segue sender:sender];
    if ([segue isKindOfClass:[UIStoryboardPopoverSegue class]]){
        if (popoverController) [popoverController dismissPopoverAnimated:NO];
        UIStoryboardPopoverSegue * popoverSegue = (UIStoryboardPopoverSegue *) segue;
        popoverController = popoverSegue.popoverController;
    }
}

- (void) showNavigationController
{
    [popoverController dismissPopoverAnimated:NO];
    popoverController = nil;

    UIStoryboard *ub = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];

    UIViewController *controller = [ub instantiateViewControllerWithIdentifier:@"navigationController"];
    [self presentModalViewController:controller animated:YES];
}

次に、ナビゲーションコントローラのMainStoryboardセット識別子内で、navigationController[テーブルの表示]ボタンをセグエする代わりに、「タッチアップインサイド」デリゲートを設定します。このデリゲートは、showNavigationControllerからメソッドを実行しますViewControllerNSNotificationCenter例として、を使用)

于 2012-07-08T21:22:11.380 に答える
1

UITableView がデリゲート メソッド要求を UITableView コントローラではなくポップオーバーのビュー コントローラに送信しているか、UITableView のデリゲートが nil に設定されています。TableView をインスタンス化している場所を見て、delegate プロパティを正しく設定していることを確認してください。

于 2012-07-03T19:35:47.497 に答える