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

ska*_*ner 4 iphone cocoa-touch uitableview

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

Jon*_*nah 5

你必须以编程方式执行此操作.这就是我最终做的事情.首先将以下内容添加到ViewController的.h文件中.

@interface YourViewController : UITableViewController <UISearchBarDelegate> 
 {
    UISearchBar *mySearchBar;
 }
    @property (nonatomic, retain) UISearchBar *mySearchBar;
    @end
Run Code Online (Sandbox Code Playgroud)

然后将此代码放在我的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];
Run Code Online (Sandbox Code Playgroud)

您可能还需要添加类似这样的内容,以防止searchBar位于tableView之上.

    self.tableView.frame = CGRectMake(0.0, 44.0, 320, 324);
Run Code Online (Sandbox Code Playgroud)

就我而言,当我深入到详细视图时,searchBar仍然在视图中.我不得不打电话:

    self.mySearchBar.hidden = YES;`
Run Code Online (Sandbox Code Playgroud)

在我的didSelectRowAtIndexPath中,当我点击一个单元格时摆脱它.