iPhone - 如何在 UITableView 中添加最后一行来添加项目,防止重新排列该行

发布于 2024-10-28 00:18:15 字数 1240 浏览 1 评论 0原文

我有一个处于编辑模式的 UITableView

 self.tableView.editing = YES;

在此表视图中,我在自定义单元格中显示了一些行,我想在末尾添加一行,以允许用户添加项目(使用另一个视图)。

所以我写了一些行:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return "number of lines" + 1;
}

- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath {
    return YES;
}

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {

    if(indexPath.row+1 != [tableView numberOfRowsInSection:0]) {   
        return UITableViewCellEditingStyleDelete;
    }
    else {
        return UITableViewCellEditingStyleInsert;
    } 
}

- (void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {

    if (indexPath.row + 1 == [tableView numberOfRowsInSection:0]) {
        cell.textLabel.text = @"Add a line...";
    }
    else {
        do the stuff in the custom cell
    }
}

通过这种方式,UITableView 允许重新排列任何行。我可以将第一行移动到“添加行”之后,并将“添加行”移动到第一个位置。

如何删除“添加行”单元格上的排列按钮并防止其他行进入此行下方?

或者有更好的方法来编码吗?

I have a UITableView put in edited mode.

 self.tableView.editing = YES;

In this table view, I have some lines displayed in a custom cell, and I'd like to add one at the end that would allow the user to add an item (using another view).

So I wrote some lines :

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return "number of lines" + 1;
}

- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath {
    return YES;
}

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {

    if(indexPath.row+1 != [tableView numberOfRowsInSection:0]) {   
        return UITableViewCellEditingStyleDelete;
    }
    else {
        return UITableViewCellEditingStyleInsert;
    } 
}

- (void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {

    if (indexPath.row + 1 == [tableView numberOfRowsInSection:0]) {
        cell.textLabel.text = @"Add a line...";
    }
    else {
        do the stuff in the custom cell
    }
}

Doing this way, the UITableView allows to rearrange any line. I can move the first line after the "add line", and move the "add line" in first position.

How may I remove the arrange button on the "add line" cell and prevent other lines to go under this one ?

Or is there a better way to code this ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

泛泛之交 2024-11-04 00:18:15

实施

- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
    return ([indexPath row] != INDEX_OF_SPECIAL_ROW)
}

- (NSIndexPath *)tableView:(UITableView *)tableView 
targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath 
       toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath
{
    if ([proposedDestinationIndexPath row] < NUMBER_OF_ROWS)
    {
        return proposedDestinationIndexPath;
    }

    NSIndexPath *otherPath = [NSIndexPath indexPathForRow:NUMBER_OF_ROWS-1 inSection:0];

    return otherPath;
}

Implement

- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
    return ([indexPath row] != INDEX_OF_SPECIAL_ROW)
}

and

- (NSIndexPath *)tableView:(UITableView *)tableView 
targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath 
       toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath
{
    if ([proposedDestinationIndexPath row] < NUMBER_OF_ROWS)
    {
        return proposedDestinationIndexPath;
    }

    NSIndexPath *otherPath = [NSIndexPath indexPathForRow:NUMBER_OF_ROWS-1 inSection:0];

    return otherPath;
}
奈何桥上唱咆哮 2024-11-04 00:18:15

更简单的方法是设置 tableFooterView。您可以在其中放置任何UIView,因此您不仅可以添加UITableViewCell,还可以添加完全自定义的子类。这样做您将避免所有不必要的检查。

The much easier way would be to set a tableFooterView. You can place any UIView in there, so not only are you allowed to add a UITableViewCell but also a completely custom subclass. Doing it this way you will avoid all the unnecessary checks.

猫性小仙女 2024-11-04 00:18:15
return UITableViewCellEditingStyleNone

对于 - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView EditingStyleForRowAtIndexPath:(NSIndexPath *)indexPath 中的该行

并查看 – tableView:moveRowAtIndexPath:toIndexPath:

return UITableViewCellEditingStyleNone

For that row in - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath

And check out – tableView:moveRowAtIndexPath:toIndexPath:

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文