点击或LongPress下面的单元格

时间:2014-11-23 17:49:29

标签: ios objective-c uitableview

我想在用户点击或按下UITableView中最后一个单元格下方时添加新单元格,但仅当视图高度大于所有单元格的高度时才会添加。

我不想要分隔符,我使用:

myTableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];

改为空白视图。

我尝试更改并向UITapGestureRecognizer添加myTableView.tableFooterView。当有足够的细胞填满屏幕时,他也离开了。我想要的是,它可以在部分空白的屏幕上运行。

我不认为在这种情况下会发送UITableViewDelegate消息。

修改

在@LeoNatan回答之后,我尝试了(在viewDidLoad中):

UIView *backView = [[UIView alloc] initWithFrame:self.myTableView.frame];
singleTapBack = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapBack:)];
//singleTapBack.delegate = self;  // the problem...
singleTapBack.numberOfTapsRequired = 1;
singleTapBack.numberOfTouchesRequired = 1;
[backView addGestureRecognizer:singleTapBack];
self.myTableView.backgroundView = backView;

当我触摸背景时:

-[UIView indexPathForRowAtPoint:]: unrecognized selector sent to instance 0x7fff0bc16a20
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView indexPathForRowAtPoint:]: unrecognized selector sent to instance 0x7fff0bc16a20'

0x7fff0bc16a20UIView *backView
@selector(handleTapBack:)未被称为

3 个答案:

答案 0 :(得分:2)

你可以添加一个新的,空的"创建新的"表格底部的单元格。做这样的事。

@property (strong, nonatomic) UITableViewCell *createNewCell;

- (UITableViewCell *)createNewCell {
    if (!_createNewCell) {
        // can be your own nib too
        _createNewCell = [self.tableView dequeueReusableCellWithIdentifier:@"CreateNewCell"
        _createNewCell.textLabel.text = @"+ New entry";
    }
    return _createNewCell;
}

- (BOOL)isCreateNewCell:(NSIndexPath *)indexPath {
    return (indexPath.row == modelArray.count + 1);
}

- (UITableViewCell *)tableView:(UITableView *)view cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    if ([self isCreateNewCell:indexPath]) {
        return self.createNewCell
    }

    // rest of cell configuration
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return modelArray.count + 1;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if ([self isCreateNewCell:indexPath]) {
        // do insert stuff or go into edit mode
    }
    // do other selection stuff
}

这将使您的表视图始终在表的底部有一个额外的单元格。您可以编写自己的行插入和编辑。

如果这不是您想要的,您可以制作透明的背景视图。

myTableView.backgroundView = [[UIView alloc] initWithFrame:self.tableView.frame;
myTableView.backgroundView.alpha = 0;

并添加UITapGestureRecognizer

UITapGestureRecognizer *tgr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@sel(newCellTapped)];
[myTableView.backgroundView addGestureRecognizer:tgr];

答案 1 :(得分:1)

如果您只想点击表格视图的空白区域,请在表格视图中添加backgroundView。在该背景视图中,添加手势识别器(请记住在背景视图中启用用户交互)。当手势识别器检测到轻击时,添加具有适当动画的单元格。最后,检查tableView.visibleCells.count以确定您的表格视图是否包含足够的单元格来填充屏幕。如果是,请禁用手势识别器。

答案 2 :(得分:0)

在下面这个场景中,我会做的就是。

  1. 始终使用your_size + 1加载tableview(+1用于添加空单元格)

  2. 加载tableview时,创建最后一个单元格,该单元格将具有相同大小的单元格。

  3. 按此按钮调用IBAction

  4. 在IBAction中,添加单元格和重新加载表

  5. 如果您有任何问题,请告诉我。


    如果您担心分隔线,请访问以下链接。

    Hide remove separator line if UITableViewCells are empty