1

ユーザーが UITableView の最後の行の下をタップしたことを検出できるようにしたいのですが、テーブルをスクロールする機能に悪影響を与えることはありません。UITableView をサブクラス化する (つまり、テーブルの touchesBegan をオーバーライドする) よりも簡単な方法はありますか?

これを行う理由は次のとおりです。テーブルが空の場合 (初めてアプリを開いたとき)、またはいくつかのセルしかない場合、画面上のすべてのスペースをタップして Add メソッドを呼び出すことができます。

大きなテーブルビューフッターで画像のない(つまり、見えない)大きなカスタムUIButtonを使用しようとしましたが、ボタンを押すとスクロールが妨げられますが、すでにいくつかのセルがある場合はスクロールが必要です。テーブルにアイテムが0個以上ある場合はフッターからボタンを削除できると考えていますが、テーブルにいくつかのアイテムが既にある場合は何もしません。

アイデアをありがとう!

4

2 に答える 2

8

tableViewのフッターに設定されたタップジェスチャレコグナイザーが私のためにトリックを行いました。アドバタイズされているように、タップを検出しますが、スクロールなどの他のジェスチャを介してUITableViewに問題なく渡されます。

//In viewDidLoad 
//configure footerView with gesture recognizer
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc]
                                            initWithTarget:self action:@selector(handleSingleTapOnFooter:)];
singleTap.numberOfTapsRequired = 1;
[self.footerView addGestureRecognizer:singleTap];
[singleTap release];
self.tableView.tableFooterView = self.footerView;

//Later on, implement the corresponding method
- (IBAction) handleSingleTapOnFooter: (UIGestureRecognizer *) sender {
    NSLog(@"The footer was tapped!");
    // code to add an entry to the table here
}

footerViewは、View Controllerのnibファイルで作成したUIViewであり、ViewControllerのUIViewアウトレットに接続されています。

より良い解決策は、UITableView自体に設定されたタップジェスチャレコグナイザーであり、タップの場所が最後のセルの後にあるかどうかを識別するコードがあると思います。それを試してみたら、更新します。

于 2011-05-31T19:38:07.430 に答える
0

UINavigationBarにastableHeaderViewを追加するのはどうTableViewですか? バーの右側のボタンは NEW ボタンである可能性があります。

UIBarButtonItem *newButton = [[UIBarButtonItem alloc] initWithTitle:@"NEW" style:UIBarButtonItemStyleDone target:self action:@selector(newEntry)];
UINavigationItem *navi = [[UINavigationItem alloc] init];
navi.title = @"my table title";
[navi setRightBarButtonItem:newButton];
UINavigationBar *bar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, widthOfMyTableview, heightOfRow)];
[bar setItems:[NSArray arrayWithObject:navi]];

...

myTableView.tableHeaderView = bar;
[newButton release];
[navi release];
[bar release];
于 2011-05-24T16:15:04.717 に答える