使用静态单元格和另一个searchResults TableView处理uitableview

时间:2013-05-26 13:22:24

标签: iphone ios objective-c uitableview ios5

最初,我有一个主表视图控制器,其中包含使用Storyboard布置的静态单元的tableview。随后,我在这个UITableViewController中添加了一个SearchDisplayController。在我的tableview数据源委托方法,如numberOfSectionsInTableView:和numberOfRowsInSection,我通过检查以下内容来区分我自己的tableview(与静态单元格)和搜索显示控制器的searchResultsTableView:

if (tableView == self.searchDisplayController.searchResultsTableView)
{
   // logic for searchResultsTableView;
}
else
{
  // logic for my main tableView
}

据我所知,这似乎是正确的做法。但是,当我尝试使用以下的cellForRowAtIndexPath方法时,由于未捕获的异常'NSInternalInconsistencyException',我收到了终止应用程序的消息,原因是:'UITableView dataSource必须从tableView返回一个单元格:cellForRowAtIndexPath:'

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (tableView == self.searchDisplayController.searchResultsTableView)
    {
        // Just want to use a default cell. There seems to be no good way of specifying a prototype cell for this in the storyboard.
        static NSString *CellIdentifier = @"Cell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if ( cell == nil ) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        }
        return cell;
    }
    else
    {
         // how to handle this case?
         return nil;
    }
}

以前,没有搜索显示控制器,我不必实现此方法,因为我的单元格是静态的。我想我的问题是,我应该如何处理混合情况(在cellForRowAtIndexPath中以及在同一个故事板中指定两种类型的单元格),其中我有一个带有动态单元格的搜索显示控制器tableview和一个带有静态单元格的tableview?我认为这种情况并不罕见。

提前致谢!

修改

虽然第一个评论者建议调用else子句中的super方法似乎解决了崩溃问题,但我遇到了另一个问题,我觉得这是因为tableViewController的固有问题是静态tableview的委托和非静态的(搜索显示结果表视图)。

新问题:我的静态tableview有2个静态单元格。当我用超过2行填充我的搜索结果tableview时,我得到一个NSRangeException',原因是: - [__ NSArrayI objectAtIndex:]:索引2超出bounds [0 .. 1]。

似乎searchResultsTableView以某种方式从我的主静态tableview中导出行数(当我添加第三个静态单元格时结果是一致的),即使委托方法:numberOfRowsInSection正在针对searchResultsTableView的情况被触发,并返回正确的号码。

有关制作静态tableviews的任何变通方法都适用于搜索显示表格视图吗?我正在考虑将我的主要静态tableview转换为带有动态单元格的表格。欢迎任何其他建议,谢谢!

4 个答案:

答案 0 :(得分:1)

我的解决方法是将静态tableview转换为动态单元格。它不漂亮,但它有效。

答案 1 :(得分:0)

我也遇到了这个问题。所以我的决定是用协议创建一个类,然后将它作为DataSource分配给UISearchDisplayViewController。

答案 2 :(得分:0)

您无需更改动态单元格的静态单元格。您可以执行以下操作:

if (tableView == self.searchDisplayController.searchResultsTableView)
{
   // logic for searchResultsTableView;
}
else
{
   UITableViewCell *cell = [super tableView:tableView
                       cellForRowAtIndexPath:indexPath];
   return cell;

}

答案 3 :(得分:0)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (tableView == self.searchDisplayController.searchResultsTableView)
    {
        // Just want to use a default cell. There seems to be no good way of specifying a prototype cell for this in the storyboard.
        static NSString *CellIdentifier = @"Cell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if ( cell == nil ) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        }
        return cell;
    }
    else
    {
          UITableViewCell *cell = [super tableView:tableView cellForRowAtIndexPath:indexPath];
         return cell;
    }
}

这对你的问题很好。