2012-06-02 31 views
2

背景iOS 5的搜索显示控制器和的UITableViewController

的重用我有一个iPhone应用程序,通过子每次使用再分级利用了UITableViewController子类的几个地方。其中一种用途是搜索控制器。

@interface TableViewController : UITableViewController 
// ... 
@interface SearchTableViewController : TableViewController <UISearchDisplayDelegate, UISearchBarDelegate> 

在故事板编辑我在,使得使用的TableViewController每个视图相同的表视图,细胞结构,和重用标识符。到处都是我使用的故事板根据我的设计时间原型生成单元格,因此在tableView:cellForRowAtIndexPath:方法中我不必包含if (cell == nil)部分。

问题

我做错了什么,而不是由其他人一样的故事板产生我的搜索控制器的细胞。起初,我在if (cell == nil)位中添加了一个来解决这个问题,但它会导致我的搜索显示空行。实际上,搜索会显示正确的空白行数。取消搜索后,结果将从背景中出现。下面是TableViewController代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 

    ModelObject* obj = [self.dataSource modelAtIndex:indexPath.row]; 
    UILabel* name = (UILabel*) [cell viewWithTag:1]; 
    name.text = obj.name; 
    return cell; 
} 

我怀疑有可能是必要的,以确定问题的其他细节,但是,什么样的事情可能会导致这将是有帮助的任何提示。谢谢。

回答

1

如果您正在使用Storyboard,请选择对象“搜索栏与搜索显示控制器”并将其放置在您的视图控制器(比方说VC)中。然后,Xcode将自动将搜索栏链接到驻留在VC中的搜索显示控制器。 因此,在VC,则可以通过self.searchDisplayController 访问搜索显示控制器和您的VC应采用的协议,如UISearchBarDelegate, UISearchDisplayDelegate 此外搜索条可以通过self.searchDisplayController.searchBar

访问实现在UISearchDisplayDelegate协议相对的方法(表视图等)。答对了!您的搜索结果将自动显示。

0

“tableview”的部分是错误的。

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

您应该使用self.tableview(或者您链接到您的tableview的IBOutlet变量名)代替。喜欢这个;

UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

当搜索完成时,cellForRowAtIndexPath中的tableview参数将不是您在viewcontroller中的tableview参数。这是问题的原因。

相关问题