在我的项目中,我需要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:
。
有没有人遇到过这个?任何想法如何解决?
答案 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;