2011-01-07 180 views
1

我試圖創建一個tableview的表頭視圖內的一個tableview。我想用searchDisplayController來管理一切。 我已經創建了一切以編程方式(我對IB感到不舒服)試圖設置所有正確的屬性,但似乎我錯過了一些東西,因爲當表出現時我無法編輯文本在搜索欄中看到任何動畫。 下面是代碼的一部分:SearchBar與searchDisplayController以編程方式編輯

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    UISearchBar *searchBarTMP=[[UISearchBar alloc]init]; 
    self.searchBar=searchBarTMP; 
    [searchBarTMP release]; 
    self.searchBar.autocapitalizationType=UITextAutocapitalizationTypeNone; 
    self.searchBar.delegate=self; 
    self.searchBar.showsScopeBar=YES; 
    self.searchBar.keyboardType=UIKeyboardTypeDefault; 
    self.searchBar.userInteractionEnabled=YES; 
    self.searchBar.multipleTouchEnabled=YES; 

    self.searchBar.scopeButtonTitles=[NSArray arrayWithObjects:NSLocalizedString(@"City",@"Scope City"),NSLocalizedString(@"Postal Code",@"Scope PostalCode"),nil]; 
    self.tableView.tableHeaderView=searchBar; 
    self.searchBar.selectedScopeButtonIndex=0; 
    self.navigationItem.title=NSLocalizedString(@"Store",@"Table title"); 

    //SearchDisplayController creation 
    UISearchDisplayController *searchDisplayControllerTMP = [[UISearchDisplayController alloc] initWithSearchBar:self.searchBar contentsController:self]; 
    self.searchDisplayController=searchDisplayControllerTMP; 
    [searchDisplayControllerTMP release]; 
    self.searchDisplayController.delegate=self; 
    self.searchDisplayController.searchResultsDelegate=self; 
    self.searchDisplayController.searchResultsDataSource=self; 

    //....continue 
} 

我知道,當你獨自一人使用搜索欄,你必須處理其委託協議,但我猜的searchDisplayController爲您管理的蘋果樣品中看到碼。 (與IB建立起來)。

有什麼建議嗎? 謝謝 安德烈

回答

1

發現... 投入表視圖的頭之後必須寫

[self.searchBar sizeToFit]; 
0

如果使用ARC,請確保您的UISearchDisplayController在創建伊娃你的頭文件。

,如果您使用的UISearchDisplayController:

UISearchDisplayController* searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchField contentsController:self];

它將被ARC得到釋放,也不會調用任何委託方法,當你調用self.searchDisplayController(該UIViewController的屬性)這將是nil

所以,解決方法是: 在你的頭文件(.h):

@interface MenuViewController : UIViewController <UITableViewDataSource, UITableViewDelegate, UISearchBarDelegate, UISearchDisplayDelegate> { 
     UISearchDisplayController* searchDisplayController; 
     UISearchBar *searchField; 
     UITableView* tableView; 
     NSArray* searchResults; 
} 

,並在實現(.M)文件:

searchField = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 49)]; 
searchField.delegate = self; 

searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchField contentsController:self]; 
searchDisplayController.delegate = self; 
searchDisplayController.searchResultsDataSource = self; 
searchDisplayController.searchResultsDelegate = self; 

tableView.tableHeaderView = searchField; 
tableView.contentOffset = CGPointMake(0, searchField.frame.size.height); 

當這樣實現的,你可以在代碼的其餘部分調用self.searchDisplayControllersearchDisplayController