UITableView内容“静态单元格”在iOS7中不起作用

时间:2013-11-04 07:01:33

标签: iphone ios7 xcode5

我的故事板中有问题。它工作正常但是当我尝试更改UITableView的内容属性时导致以下错误

断言失败 - [UITableView dequeueReusableCellWithIdentifier:forIndexPath:],/ SourceCache / UIKit / UIKit-2903.23 / UITableView.m 由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无法使用标识符Cell对单元格进行出列 - 必须为标识符注册一个nib或类或在故事板中连接原型单元'

我想设计一个带有静态单元格的分组表格视图。提前谢谢

代码

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
// Return the number of sections. 
return 2; 
} 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
return 3; 
} 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
static NSString *CellIdentifier = @"Cell"; 
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 
return cell; 
} 

7 个答案:

答案 0 :(得分:7)

如果使用静态单元格,只需注释所有UITableViewDatasourceDelegate方法。请注释以下代码:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
// Return the number of sections. 
return 2; 
} 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
return 3; 
} 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
static NSString *CellIdentifier = @"Cell"; 
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 
return cell; 
} 

希望这会对你有帮助!

答案 1 :(得分:7)

而不是使用:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

// - >这在使用原型单元格时使用(例如)Dynamic TableView

使用:

UITableViewCell *cell = [super tableView:tableView
                   cellForRowAtIndexPath:indexPath];

// - >由于您选择了Static TableCells,因此您无需重复使用,而是使用您在nib中创建的单元格

答案 2 :(得分:1)

我遇到了同样的问题,我想我找到了解决问题的方法。

  1. 创建一个从UITableViewController扩展的Controller来包装它的控制器,它将具有默认的UITableViewDelegate和UITableViewDataSource方法。
  2. 删除UITableView委托和数据源
  3. 从控制器文件中删除默认的UITableViewDelegate和UITableViewDataSource方法,因为它存在静态单元格,所以如果存在,则不会出现
  4. 希望它有所帮助。

答案 3 :(得分:0)

使用storyboard时,必须在storyboard中注册tableview单元格。这意味着必须将单元格添加到表格中,并且必须设置其标识符。此标识符应在cellForRowAtIndexpath

中的代码中使用

编辑

如果是静态细胞,需要在笔尖中创建每个关节细胞,并通过代码或笔尖填充内容

阅读本文

答案 4 :(得分:0)

不允许在普通的UITableView中使用静态单元格。

相反,您需要使用UITableViewController来使用静态单元格。

thisthis可能会或可能会有所帮助。

答案 5 :(得分:0)

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [YourArr count];
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 44;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *CellIdentifier = [NSString stringWithFormat:@"cell %d",indexPath.row];

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    cell = nil;
    if (cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
     cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    }
    return cell;
}

答案 6 :(得分:0)

cellForRowAtIndexPath

中添加此代码
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
}
else
{
    UIView *subview;
    while ((subview= [[[cell contentView]subviews]lastObject])!=nil)
        [subview removeFromSuperview];
}