2011-05-24 52 views
1

我希望能够检测到用户在我的UITableView的最后一行下面敲击,但没有负面影响滚动表的能力。有没有比UITableView的子类更简单的方法(即覆盖表的touchesBegan)?iOS UITableView检测触摸下面的表 - 需要子类?

我想这样做的原因是: 当表格为空(第一次打开应用程序)或只有几个单元格时,屏幕上的所有空间都可以点击以调用Add方法。

我试过在一个大的tableview脚本中使用一个没有图像(即不可见)的大的自定义UIButton,但按下按钮会阻止任何滚动,但是您希望滚动一次就已经有几个单元格了。我想我可以从页脚中删除按钮,一旦表中有多于零的项目,但是当表格中有一些项目时,这对我没有任何帮助。

感谢您的任何想法!

回答

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是我在我的视图控制器的榫文件创建一个UIView,并附着在视图控制器一个UIView出口。

我想一个更好的解决方案是在UITableView本身设置一个轻拍手势识别器,用代码来确定轻敲的位置是否在最后一个单元之后。如果我试着去尝试,我会更新。

0

如何将UINavigationBar作为tableHeaderView添加到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]; 
+0

添加功能的导航栏按钮绝对是一个很好的选择/添加;但是我抱着希望能够满足最初要求的建议。 – kris 2011-05-24 19:34:42

+0

你可以用你自己的UIControl子类来尝试。我仍然更喜欢New按钮,因为更明显的是如何添加新条目。在我的一些tableviews(没有naviagtion栏的那些)中,我把“ - 添加新的”作为第一个输入到数据源中。 – 2011-05-27 13:44:22

+0

这不是问题的答案,所以它应该是对主线程的评论。 – 2012-08-16 18:27:21