Iphone 以编程方式创建自定义UISearchDisplayController
我能够使用故事板创建一个应用程序-它有一个导航控制器,其中包含一个带有搜索显示控制器的表视图控制器,并按预期工作 然后,我决定通过在导航栏中添加一个Iphone 以编程方式创建自定义UISearchDisplayController,iphone,objective-c,ios7,Iphone,Objective C,Ios7,我能够使用故事板创建一个应用程序-它有一个导航控制器,其中包含一个带有搜索显示控制器的表视图控制器,并按预期工作 然后,我决定通过在导航栏中添加一个uiButtonBasystemItemSearch(放大镜)来定制它,这样当触摸它时,它会在导航栏上显示搜索栏,就像setDisplaysSearchBarInNavigationBar一样。为此,我从情节提要中删除了UISearchDisplayController,并以编程方式添加了它,如下面的代码所示。当触摸放大镜时,会调用btnSearch
uiButtonBasystemItemSearch
(放大镜)来定制它,这样当触摸它时,它会在导航栏上显示搜索栏,就像setDisplaysSearchBarInNavigationBar
一样。为此,我从情节提要中删除了UISearchDisplayController
,并以编程方式添加了它,如下面的代码所示。当触摸放大镜时,会调用btnSearchClicked
函数,因此按钮会向右连接
我的项目与Apple示例项目“”非常相似,但没有范围栏
- (IBAction) btnSearchClicked:(id)sender
{
//Set up search bar
UISearchBar *mySearchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0.0, 0.0, 320.0, 44.0)];
[mySearchBar setDelegate:self];
[mySearchBar setShowsCancelButton:YES animated:NO];
// Set up search display controller
UISearchDisplayController *mySearchController = [[UISearchDisplayController alloc] initWithSearchBar:mySearchBar contentsController:self];
mySearchController.delegate = self;
mySearchController.searchResultsDataSource = self;
mySearchController.searchResultsDelegate = self;
//mySearchController.displaysSearchBarInNavigationBar = YES;
mySearchController.navigationItem.titleView.opaque = NO;
[self.navigationController.navigationBar addSubview:self.searchDisplayController.searchBar];
}
这种方法有两个问题最重要的一点是,即使我设置了委托属性,当我在搜索栏中键入时,没有调用任何委托函数(特别是应该重新加载TableforSearchString
)
第二个问题是,尽管调用了setShowsCancelButton
方法,取消按钮仍不显示
去年我一直在学习iOS,阅读了所有我能在上面找到的东西,但是我想不出这个。这是我最后的选择,如果我必须的话,我会回到使用标准搜索栏的老故事板方法。我喜欢另一种方法的原因是,我有一个很长的联系人列表(~5000),不想滚动到顶部以获得搜索栏。看起来您没有添加正确的searchDisplayController?您添加了self.searchDisplayController,但初始化了mySearchController。尝试将最后一行放在以下位置: [self.navigationController.navigationBar添加子视图:mySearchController.searchBar]