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

时间:2014-04-28 15:51:24

标签: ios objective-c uikit uisearchbar uisearchdisplaycontroller

在我的项目中,我需要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且其superview的类为UISearchDisplayControllerContainerView的视图。

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

有没有人遇到过这个?任何想法如何解决?

1 个答案:

答案 0 :(得分: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;