Ios Xcode UISearchBar代码实现

Ios Xcode UISearchBar代码实现,ios,objective-c,xcode,uisearchbar,Ios,Objective C,Xcode,Uisearchbar,我目前正在从事一个项目,在这个项目中,我必须过滤NSArray(显示在UITableView中)。问题是,既没有XIB文件也没有故事板。 我的问题是(我已经设置了谓词和搜索方法et.c),如何让搜索栏仅使用代码显示在我的程序中?ofc我需要能够使用它。 我很高兴能在这个问题上得到一些帮助,因为我找到的每个教程都使用故事板或XIB:( 首先非常感谢你! 顺便说一句,这是我到目前为止关于搜索栏的两种方法,TableView也已经设置好了 -(void) filterContentForSearchT

我目前正在从事一个项目,在这个项目中,我必须过滤NSArray(显示在UITableView中)。问题是,既没有XIB文件也没有故事板。 我的问题是(我已经设置了谓词和搜索方法et.c),如何让搜索栏仅使用代码显示在我的程序中?ofc我需要能够使用它。 我很高兴能在这个问题上得到一些帮助,因为我找到的每个教程都使用故事板或XIB:(

首先非常感谢你! 顺便说一句,这是我到目前为止关于搜索栏的两种方法,TableView也已经设置好了

-(void) filterContentForSearchText:(NSString *)searchText scope:(NSString *)scope {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@", searchText];
self.searchResults = [self.array filteredArrayUsingPredicate:predicate];
}


}

如果没有XIB文件和故事板,它会在代码中的某个地方启动(可能在viewDidload中),看起来像这样

UISearchBar *searchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0, 0, 100, 20)];
searchBar.delegate = self;
//etc..
现在,首先在接口中添加一个属性

@property (nonatomic, strong)UISearchBar *searchBar;
并在viewDidLoad中更改此行:

self.searchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0, 0, 100, 20)];
现在,您可以在代码中的任意位置使用我们的
self.searchBar

编辑:

如果还没有,请不要忘记将其添加到界面:

@interface ViewController () <UISearchBarDelegate, UISearchDisplayDelegate>

@界面视图控制器()

您可以执行以下操作:

在您的.h中添加以下内容:

@property (nonatomic,strong) UISearchBar *searchBar;
将此添加到
viewDidLoad
方法中

self.searchBar = [[UISearchBar alloc]init];
self.searchBar.frame = CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height);
self.searchBar.delegate = self;
//Customize the searchBar
[self.view addSubview:self.searchBar];
每当你想搜索时,按键盘上的搜索按钮。当你这样做时,会调用一个代理。就像这样

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{
  [searchBar resignFirstResponder];
  //Do some search
}

您可以使用
searchBar.text
属性访问输入的文本。我假设您已经实现了相关协议。

尝试了此操作,但我在self.searchBar.delegate=self处收到警告,说“Assining to id…from compatible type”,在self.view addSubview处收到错误,说“UIView没有可见的@Interface”,有什么想法吗?
@interface ViewController()
这应该可以解决问题。:)它是
addSubview
而不是
addSubview
。至少现在搜索栏出现了;)现在的问题是1)键盘并没有消失,因为它应该2)灰色屏幕覆盖了我的一些桌面视图,然后是搜索栏,然后是灰色屏幕。我不知道这里发生了什么。。。你知道如何解决这个问题吗?;)我愿意。但我可能需要看更多的代码才能知道到底发生了什么。该死的,因为我只是一家公司的学生,我不允许在网上发布大部分代码,你能告诉我你需要哪部分代码吗?那太好了,谢谢!我也尝试了你的方法,没有得到任何错误或警告,所以这应该是有效的,但它没有出现在屏幕上。我找到了这个方法:'-(id)initWithStyle:(UITableViewStyle)style{self=[super initWithStyle:style];如果(self){//Custom initialization}返回self;}'我需要在这里更改什么吗?你的方法现在工作了,它需要[self.view addSubview:self.searchBar];为了实际显示,不幸的是,它覆盖了一些TableView,请您也帮我一下好吗?
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{
  [searchBar resignFirstResponder];
  //Do some search
}