从 uitableview 隐藏或删除部分

Posted

技术标签:

【中文标题】从 uitableview 隐藏或删除部分【英文标题】:Hide or remove section from uitableview 【发布时间】:2011-06-27 07:20:32 【问题描述】:

我在我的应用程序中实现了一个分组表视图,用户可以从表的不同部分选择行。

我想根据第一部分的行选择隐藏(删除)特定部分(包括标题)。

第一部分的标题是“你有车吗?”,在行选择中答案是“是”或“否”。 如果用户选择否,则分组表中的第二和第三部分应隐藏(删除)。

对于分组表中的单选,我实现this

我也参考了this,但没有完全满足我的需求。

请帮忙。

编辑

TableViewDelegates

myArray 是我的数据源。 myArrayAnswerCount 包含每个部分的行数计数

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
    return [myArray count];


-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 
    for (int i = 0; i<[myArray count]; i++) 
        if (section==i) 
            return [[myArray objectAtIndex:i] title];
        
    


-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
    for (int i = 0; i<[myArray count]; i++) 
        if (section==i) 
            return [[myArrayAnswerCount objectAtIndex:i] intValue];
        
    

这是我如何从表中删除部分的代码, myIndexPath 是 NSIndexPath 变量,它指向当前选择的部分。

[table beginUpdates];
[myArray removeObjectAtIndex:myIndexPath.section];
[table deleteSections:[NSIndexSet indexSetWithIndex:myIndexPath.section] withRowAnimation:YES];
[table endUpdates];

【问题讨论】:

看这里:developer.apple.com/library/ios/#documentation/userexperience/… 【参考方案1】:

我解决了我的问题。

[table beginUpdates];
[myArray removeObjectAtIndex:myIndexPath.section];
[table deleteSections:[NSIndexSet indexSetWithIndex:myIndexPath.section] withRowAnimation:UITableViewRowAnimationRight];
[table endUpdates];

“第 0 节中的行数无效。更新后现有节中包含的行数 (2) 必须等于更新前该节中包含的行数 (3)”错误我是否也忘记从 myArrayAnswerCount 数组中删除对象了。

所以最后是下面的代码

[table beginUpdates];
[myArray removeObjectAtIndex:myIndexPath.section];
[myArrayAnswerCount removeObjectAtIndex:myIndexPath.section]; //this is what i forgot.
[table deleteSections:[NSIndexSet indexSetWithIndex:myIndexPath.section] withRowAnimation:UITableViewRowAnimationRight];
[table endUpdates];

谢谢。

【讨论】:

myArrayAnswerCount 是 [myArray count] 的值还是其他值。如果我给出 [[myArray Count] removeObjectAtIndex:],它会抛出警告“method removeObjectAtIndex”未找到,请帮助我,在此先感谢:) @Eshwar Chaitanya:myArrayAnswerCount 包含表中每个部分的行数。很明显是一个可变数组。 我每个部分只有 1 行,当我在添加提醒页面中添加提醒时,部分的数量会有所不同,请相应地建议我,提前谢谢:) 我的意思是当我按编辑时,我可以按 - 号并删除单元格,但是当我再次导航并进入我们执行编辑和删除操作的视图时,删除的单元格仍然可用,如何使部分永久删除,谢谢:) @EshwarChaitanya:myArrayAnswerCount 只是一个可变数组,其中包含表中每个部分的行数(这将是一个 int 计数,在您的情况下,每个部分的值可能为 1)。包括您还需要从数据源中删除值(您可能为此使用了可变数组)。首先检查一下。也相应地调试您的代码。【参考方案2】:

您可以查看您的UITableViewDataSource,例如:

 - (NSInteger)numberOfSectionsInTableView:(UITableView *)aTableView
             if(YOUR_INSTANCE_BOOL_VAR==NO)
                   return 1;
             else
                   return 3;
             
 

用户选择 NO 后,将 YOUR_INSTANCE_BOOL_VAR 设置为 NO,然后调用 [tableView reloadData]; 显然,您还必须操纵numberOfRowsInSection 以在用户选择NO 后触发您想要的行数。

另一种方式是拨打:- (void)deleteSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation;

您可以通过以下方式获取行 indexPaths:

+ (NSIndexPath *)indexPathForRow:(NSUInteger)row inSection:(NSUInteger)section; 

【讨论】:

@Mat :嗨,我选择使用 - (void)deleteSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation;方法,现在如何在从组中成功删除特定部分后更新我的数据(我的意思是 NSMutableArray),这些数据加载到分组表中? 我不知道你的 NSMutableArray 中有什么类型的对象以及按什么顺序,但是使用 NSMutableArray 你可以通过访问索引来添加/删除/替换任何对象。 @Mat :嗨,我收到一些错误“第 0 节中的行数无效。更新 (2) 后现有节中包含的行数必须等于包含的行数在更新之前的那个部分(3)”,同时删除第 0 部分。在删除部分时,第 1 部分必须具有与第 0 部分相同的行数吗? 这是一个经典问题,可能是因为在修改dataSource之前调用了reloadData,但是如果你编辑你的问题并发布你的tableviewdelegate和tableviewdatasource回调,也许我们可以更好地理解问题出在哪里。跨度> @Mat:嗨,我解决了问题,实际上我忘记从 myArrayAnswerCount 中删除对象。这就是为什么它向我显示这样的错误。谢谢你的帮助..【参考方案3】:

如果您不想实际删除部分或行,而只是将其隐藏。您可以使用:

[tableView beginUpdates];
[tableView reloadSections:[NSindexSet indexSetWithIndex:(indexOfSection)] withRowAnimation:(UITableViewRowAnimationOfChoice)]; //hide section

[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:(UITableViewRowAnimationOfChoice)]; //hide rows
[tableView endUpdates];

如果您阅读文档,它会说这些行为类似于删除/插入方法,但是它们实际上并未被删除,因此无需删除/插入。您可以调用该方法两种隐藏或取消隐藏。

【讨论】:

以上是关于从 uitableview 隐藏或删除部分的主要内容,如果未能解决你的问题,请参考以下文章

从 UITableView 隐藏单元格

如何从 UITableView 中删除一行

在ios的uitableview中自定义单元格编辑样式

从 UITableView 中删除行会导致部分标题问题?

如何从 UITableView (iPhone/iPad) 中删除部分

UITableView Section Index 重叠行删除按钮