UISearchBar 在 iOS 7.1 上添加到 UITableViewCell 时会更改其超级视图

Posted

技术标签:

【中文标题】UISearchBar 在 iOS 7.1 上添加到 UITableViewCell 时会更改其超级视图【英文标题】:UISearchBar changes its superview when it is added to UITableViewCell on iOS 7.1 【发布时间】:2014-04-28 15:51:23 【问题描述】:

在我的项目中,我需要一个 UISearchBar 来滚动 UITableView。所以我把它放在UITableViewCell 这样的地方:

    searchBar                   = [[SearchBar alloc] initWithFrame:cell.bounds];
    searchBar.delegate          = self;
    searchBar.placeholder       = NSLocalizedString(@"Search friends", "");
    searchBar.layer.borderWidth = 1.f;
    searchBar.layer.borderColor = [UIColor whiteColor].CGColor;

    sdc = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:nil];
    sdc.delegate = self;

    [cell addSubview:searchBar];

它在 ios 6 上运行良好。但在 iOS 7 上,当它刚刚获得焦点时,它会切换到另一个超级视图(并从屏幕上消失)。起初我认为我的项目有问题会导致这种行为,但后来我创建了一个简单的测试项目并验证了这一点 - 事实上,这是一个规则,在 iOS 7.1 上 UISearchBar 添加到 UITableViewCell 移动到另一个超级视图和成为第一响应者后立即从屏幕上消失。

我已经覆盖了搜索栏上的willMoveToSuperview: 方法,我看到它从UITableViewCellScrollView 移动到一个视图,哪个类是UIView,其父视图的类是UISearchDisplayControllerContainerView

经过几个小时的搜索和实验,我无法弄清楚导致这种行为的原因以及如何逃避它。我所知道的是,它恰好发生在对这两个 UISearchDisplayDelegate 方法的调用之间:searchDisplayControllerWillBeginSearch:searchDisplayControllerDidBeginSearch:

有人遇到过这种情况吗?任何想法如何解决它?

【问题讨论】:

搜索栏不使用单元格,而是将搜索栏设为表格视图的headerView @rmaddy 谢谢你的建议,我会试试的 SearchBar disappears from headerview in iOS 7 的可能重复项 【参考方案1】:

您确定需要这种奇怪的方式将UISearchBar 添加到UITableViewCell 来滚动它吗?我只是像这样使用 smthng:

UISearchBar *mainSearchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 44)];
mainSearchBar.delegate = self;

UISearchDisplayController *searchCon = [[UISearchDisplayController alloc] initWithSearchBar:mainSearchBar contentsController:self ];
searchCon.delegate = self;
searchCon.searchResultsDataSource = self;
searchCon.searchResultsDelegate = self;

mainTableView.tableHeaderView = mainSearchBar;

【讨论】:

谢谢。我明白了。这很明显,我会试一试 @AndreyChernukha 很高兴为您提供帮助! Слава Украине ;) Героям Слава:) Спасибо за поддержку все равно та же херня, хоть и сделал tableHeaderView。 все равно пропадает

以上是关于UISearchBar 在 iOS 7.1 上添加到 UITableViewCell 时会更改其超级视图的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS7 中使用 UISearchBar 将子视图添加到 tableHeaderView 行为不端

如何在 iOS 10 的目标 c 中使用 uisearchbar?

iOS Scope Bar 添加到 UISearchBar 下后不出现

UITextField TapGesture 在 iOS 7.1 上没有响应

ios 7.1 将歌曲添加到音乐库

将 UISearchBar 添加到嵌入到 NavigationController IOS6 中的 UICollectionviewController