ios - 何时从 UITableViewCell 中删除 subview ?

标签 ios objective-c uitableview uisearchbar

我有一个 UITableViewsearchBarsearchDisplayController .我想做的是展示一个button当没有找到结果时。所以用户可以搜索服务器的数据库。我有一个 NSMutableArray存储searchResults .所以我的委托(delegate)方法如下所示:

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"titulo contains [cd] %@", searchText];
    NSArray *filtroUsuario = [self.objects filteredArrayUsingPredicate:predicate];
    self.searchResults = [[NSMutableArray alloc] initWithArray:filtroUsuario];
    if (self.searchResults.count < 1) {
        UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        btn.frame = CGRectMake(0, 0, 320, 50);
        btn.showsTouchWhenHighlighted = YES;
        [btn setTitle:@"Procurar no Banco de Dados" forState:UIControlStateNormal];
        btn.tag = 1;
        [self.searchResults addObject:btn];
        self.adicionar = YES;
    }
}

基本上,当没有结果时,我创建并添加一个 button我的结果array .然后,在 cellForRowAtIndexPath ,我有以下内容:
if (tableView == self.searchDisplayController.searchResultsTableView) {
        if (self.adicionar == YES) {
            cell.textLabel.text = @"";
            [cell.contentView addSubview:self.searchResults[indexPath.row]];
            self.adicionar = NO;
        }

这显示了 button正是我想要的方式,当cancelButton被按下,或 button有问题,我只是将其从 searchResults 中删除以防用户再次搜索。 [self.searchResults removeAllObjects] .

问题是,由于我正在重用单元格,subview当用户再次搜索时,它仍然存在。我有几个选项来处理这个问题,我可以为单元格创建一个属性并在 button 时删除 subview 。被按下。但我选择包含 [[cell.contentView viewWithTag:1] removeFromSuperview];cellForRowAtIndexPath 的开头,所以当它再次被调用时,它会删除 subViews在继续之前。

现在一切正常。我的问题是这是否是最好的方法,或者是否有更简单的方法。由于我的应用程序是一个复杂的应用程序,我非常关心内存和性能,此外,我真的很想学习可用的最酷的技术。

有什么想法吗?

最佳答案

看看 UITableViewCell 上的 -prepareForReuse。可能最适合您描述的确切情况。 (下面的草图示例)

@interface CustomCellName : UITableViewCell
@property (strong, nonatomic) UIButton *someButton;
@end

@implementation
- (void)prepareForReuse
{
    _someButton.hidden = YES;
    //etc...
}
@end

标签也非常好,尽管许多人发现这种方法并不令人满意。 (*需要引用)

另一种方法是使用 UIButton 子类化 UITableViewCell 作为属性,您可以通过 -cellForRowAtIndexPath 从 tableView 调整该属性。

关于ios - 何时从 UITableViewCell 中删除 subview ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22327511/

相关文章:

ios - 多个UITableViewCells在点击时会做不同的事情

objective-c - UITableViewRowAnimationAutomatic 与 UITextView 无法正确显示

objective-c - 如何在iOS中显示复制大文件的进度?

objective-c - 对两个 UISlider 进行编程,使其不超过彼此的值

ios - NSUserDefaults 中的 Valueforkey

objective-c - 如何在 iOS 8 中禁用自动应用缩放?

iphone - 触摸索引时显示 UITableView 的部分标题

ios - iOS 11 的商店服务崩溃

ios - 如何在 iOS 中对带符号的数组进行排序?

ios - 在 iOS 中解析 json 并将值添加到对象数组