背景
我有一个iPhone应用程序,通过在每次使用时再次进行子类化,在几个地方使用UITableViewController
子类。其中一个用途是搜索控制器。
@interface TableViewController : UITableViewController
// ...
@interface SearchTableViewController : TableViewController <UISearchDisplayDelegate, UISearchBarDelegate>
在storyboard编辑器中,我在每个使用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;
}
我怀疑可能还有其他细节需要确定问题,但任何有关可能导致此问题的提示都会有所帮助。感谢。
答案 0 :(得分:1)
如果您使用的是Storyboard,请选择“带搜索显示控制器的搜索栏”对象并将其放在视图控制器中(假设为VC)。然后Xcode会自动将搜索栏链接到驻留在VC中的搜索显示控制器。
因此,在VC中,您可以通过self.searchDisplayController
访问搜索显示控制器
你的VC应该采用UISearchBarDelegate, UISearchDisplayDelegate
之类的协议
您的搜索栏也可以通过self.searchDisplayController.searchBar
在UISearchDisplayDelegate协议中实现相关方法(表视图等)。答对了!您的搜索结果将自动显示。
答案 1 :(得分:1)
&#34; tableview&#34;的一部分是错的。
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
您应该使用self.tableview(或链接到tableview的IBOutlet变量名称)。像这样;
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
cellForRowAtIndexPath中的tableview参数不会是搜索完成时viewcontroller中的tableview参数。这就是问题的原因。