我的目标是在UITableView上方的视图中修复UISearchBar。当我在IB中进行设置然后构建时,表格视图会扩展以填充整个窗口,并且搜索栏不可见。如果我将UISearchBar作为UITableView的子视图,搜索栏会按预期显示,但这不是我想要的。我所追求的是,在用户选择一行后,我想显示一个详细视图,搜索栏仍然保留在屏幕上。所以我认为它需要是一个单独的子视图,而不是表格的一部分。但是出于某些原因,当它只是表格外的子视图时,我无法显示搜索栏。
答案 0 :(得分:5)
你必须以编程方式执行此操作。这就是我最终做的事情。 首先将以下内容添加到ViewController的.h文件中。
@interface YourViewController : UITableViewController <UISearchBarDelegate>
{
UISearchBar *mySearchBar;
}
@property (nonatomic, retain) UISearchBar *mySearchBar;
@end
然后将此代码放在我的RootViewController的viewDidLoad方法中。
self.mySearchBar = [[[UISearchBar alloc]
initWithFrame:CGRectMake(0.0, 64.0, self.view.bounds.size.width,
44.0)] autorelease];
self.mySearchBar.delegate = self;
self.mySearchBar.showsCancelButton = YES;
self.mySearchBar.hidden = YES;
self.mySearchBar.tintColor = [UIColor lightGrayColor];
[self.navigationController.view addSubview: self.mySearchBar];
您可能还需要添加类似的内容,以防止searchBar位于tableView之上。
self.tableView.frame = CGRectMake(0.0, 44.0, 320, 324);
在我的情况下,当我深入到详细视图时,searchBar仍然在视图中。我不得不打电话:
self.mySearchBar.hidden = YES;`
在我的didSelectRowAtIndexPath中,当我点击一个单元格时摆脱它。
答案 1 :(得分:1)
它不适用于UITableViewController。这将是你想要的行为:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
return search; //in .h, IBOutlet UISearchBar* search;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return 44;
}