6

我的故事板有问题。它工作正常,但是当我尝试更改 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; 
} 
4

7 回答 7

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; 
} 

希望这对你有帮助!

于 2014-02-21T07:21:32.440 回答
7

而不是使用:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

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

利用:

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

//-> 由于您选择了静态表格单元格,因此您不需要重用,而是使用您在 nib 中创建的单元格

于 2014-03-17T02:38:21.453 回答
1

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

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

希望能帮助到你。

于 2013-11-23T19:02:21.157 回答
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;
}
于 2014-02-21T07:26:53.140 回答
0

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

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

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

于 2014-01-29T23:40:48.407 回答
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];
}
于 2015-03-08T07:18:40.380 回答
0

使用storyboard时,tableview cell必须注册到storyboard中cellForRowAtIndexpath

编辑

如果是静态单元格,则需要在 nib 中创建每个 purticular 单元格,并通过代码或 nib 填充内容

读这个

于 2013-11-04T07:18:51.037 回答