除非在表视图中,否则无法显示UISearchBar

时间:2009-08-11 22:33:15

标签: iphone cocoa-touch uitableview

我的目标是在UITableView上方的视图中修复UISearchBar。当我在IB中进行设置然后构建时,表格视图会扩展以填充整个窗口,并且搜索栏不可见。如果我将UISearchBar作为UITableView的子视图,搜索栏会按预期显示,但这不是我想要的。我所追求的是,​​在用户选择一行后,我想显示一个详细视图,搜索栏仍然保留在屏幕上。所以我认为它需要是一个单独的子视图,而不是表格的一部分。但是出于某些原因,当它只是表格外的子视图时,我无法显示搜索栏。

2 个答案:

答案 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;
}