隐藏或删除uitableview中的部分

时间:2011-06-27 07:20:33

标签: iphone uitableview

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

我想隐藏(删除)特定部分(包括标题),具体取决于第一部分行的选择。

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

对于分组表中的无线电选择,我实现了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];

3 个答案:

答案 0 :(得分:9)

我解决了我的问题。

[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];

感谢。

答案 1 :(得分:1)

您是否看过APPLE提供的demo

希望它有所帮助。

答案 2 :(得分:0)

您可以在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;