如何从UITableView中删除不需要的单元格或行

时间:2017-03-11 10:55:46

标签: ios objective-c uitableview nsmutablearray

在我的应用程序中我有两个TableViewControllers,首先我用随机按钮随机选择了几行并将他们的indexPath.row保存在一个单独的MutableArray中然后我尝试了只访问第二个TableViewController中的那些选定行,我使用了以下代码,

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
   return rArray.count;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
    Radio * RadioObject;
    RadioObject = [rArray objectAtIndex:indexPath.row];
    if([rFavorites containsObject:[NSNumber numberWithInt:(int)indexPath.row]])
        cell.textLabel.text = RadioObject.radioTitle;
    else
        cell.frame = CGRectZero;


    return cell;

}

它给了我跟随结果。当从第一个TableViewController&将结果存储在MutableArray这里是NSLog结果

Favorite Radios array is (
    10,
    8,
    9
)

现在在模拟器中

enter image description here] 1

我愿意做的是从这个TableViewController中删除其他空单元格。所以请建议我如何实现这一目标?

4 个答案:

答案 0 :(得分:2)

如果要从tableview中删除所有其他行[仅显示选定的行]:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
   return rFavorites.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
    Radio * RadioObject;
    NSInteger index_rArray = [[NSString stringWithFormat:@"%@",[rFavorites objectAtIndex:indexPath.row]] integerValue];
    RadioObject = [rArray objectAtIndex:index_rArray];
    cell.textLabel.text = RadioObject.radioTitle;
    return cell;
}

如果您希望保留所有行,则隐藏/压缩;

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath;
{
    if([rFavorites containsObject:[NSNumber numberWithInt:(int)indexPath.row]]){
    return 50; // whatever your cell size is
    }
    else {
    return 0;
    }
}

答案 1 :(得分:0)

试试这一个代码。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return rFavorites.count;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];

Radio * RadioObject;
RadioObject = [rArray objectAtIndex:[rFavorites[indexPath.row]]];
    cell.textLabel.text = RadioObject.radioTitle;


return cell;

}

答案 2 :(得分:0)

实际上你正在做的是错误的,你应该为喜欢的东西创建一个新的数组,因为稍后第一个数组会得到更新,因为你只是将引用作为行号,第二个引用数组是没用的。

要回答您的问题,请在没有参考编号时将行高设置为0 ...

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath      *)indexPath;
{
    if (don't have reference) return 0;
    return your_default_height
}

答案 3 :(得分:0)

你有没有尝试过根本不添加它们? :)

也许你可以在切换表时切换源数组,所以当在重新加载时调用numberOfRows时,tableView将使用正确的数组重新加载,并显示正确数量的单元格。

然后你不需要像设置cell.frame到CGZero一样破解。虽然如果你将heightForRow设置为UITableViewAutomaticDimension,那hack可能会有用。