Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 以编程方式创建自定义UISearchDisplayController_Iphone_Objective C_Ios7 - Fatal编程技术网

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]