Ios 多个动态原型单元的索引路径
先生们 我需要一些帮助。这几乎就像我知道我想做什么,但我一直无法得到它的工作时,编码出来。场景是我有一个视图控制器,其中有一个表视图。我的表格视图有三种不同的动态原型,因为我有三种不同类型的单元格。现在,我想做的就是指定在哪一行中生成哪个原型单元。我还在故事板中为每个原型单元指定了唯一的标识符 我的理解方式是,我的cellforRowatIndexpath方法需要了解在该行中显示哪种类型的单元格,然后选择标识符,根据需要退出队列并设置内容 相应地,这是我的代码,我正在尝试:Ios 多个动态原型单元的索引路径,ios,uitableview,uiviewcontroller,uistoryboard,nsindexpath,Ios,Uitableview,Uiviewcontroller,Uistoryboard,Nsindexpath,先生们 我需要一些帮助。这几乎就像我知道我想做什么,但我一直无法得到它的工作时,编码出来。场景是我有一个视图控制器,其中有一个表视图。我的表格视图有三种不同的动态原型,因为我有三种不同类型的单元格。现在,我想做的就是指定在哪一行中生成哪个原型单元。我还在故事板中为每个原型单元指定了唯一的标识符 我的理解方式是,我的cellforRowatIndexpath方法需要了解在该行中显示哪种类型的单元格,然后选择标识符,根据需要退出队列并设置内容 相应地,这是我的代码,我正在尝试: - (UITable
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath * )indexPath
{
if(indexPath.row==0)
{
static NSString *CellIdentifier = @"HelloCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// configure your cell here...
return cell;
}
}
不幸的是,事情并没有按计划进行,我的应用程序崩溃了,这给了我很大的麻烦 2013-02-07 16:47:39.859项目SABC30068:c07]*由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[NSIndexPath setTableViewStyle:]:无法识别的选择器发送到实例0x83812e0”错误 表视图本身没有问题,因为我已经正确设置了数据源和委托。并为表视图制作了一个插座 我还尝试将cellforRowAtIndexPath中的if语句更改为if(myTable.indexPathForSelectedRow==0)。这会在所有单元中生成动态原型,但至少应用程序不会停止 你们认为问题出在哪里 我不知道如何正确使用索引路径,如果有人能帮我,我将不胜感激。(这是一个有点长的评论,所以我把它放在这里,即使它没有直接回答问题) 异常断点:
转到断点导航器
在导航器的底部有“+”按钮
然后它将添加一个断点供您自定义,只需单击“完成”即可设置。
现在,当抛出异常时,您将被带到触发异常的行。最重要的是,您将能够看到当时的整个调用堆栈。对调试非常有用 从4.2开始,Xcode中的断点可以做很多“时髦”的事情(不确定确切的时间)(这是一个有点长的评论,所以我把它放在这里,即使它没有直接回答问题) 异常断点:
转到断点导航器
在导航器的底部有“+”按钮
然后它将添加一个断点供您自定义,只需单击“完成”即可设置。
现在,当抛出异常时,您将被带到触发异常的行。最重要的是,您将能够看到当时的整个调用堆栈。对调试非常有用
从4.2开始,Xcode中的断点可以做很多“时髦”的事情(不确定确切的时间)对于故事板和动态原型单元,您不必担心或检查
dequeueReusableCellWithIdentifier:
是否返回零单元
你必须做的是:
- 对于每一行,确定正确的单元格标识符,并将其输入到
dequeueReusableCellWithIdentifier:
- 对于每个动态原型单元,确保设置了正确的标识符(选择故事板上的每个单元,然后在“表视图”单元部分填充标识符下的“属性检查器”中)
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 3;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *identifier = [NSString stringWithFormat:@"Cell%d", indexPath.row + 1];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier forIndexPath:indexPath];
cell.textLabel.text = identifier; // just show the identifier as title
return cell;
}
使用故事板和动态原型单元,您不必担心或检查
dequeueReusableCellWithIdentifier:
是否返回nil单元
你必须做的是:
- 对于每一行,确定正确的单元格标识符,并将其输入到
dequeueReusableCellWithIdentifier:
- 对于每个动态原型单元,确保设置了正确的标识符(选择故事板上的每个单元,然后在“表视图”单元部分填充标识符下的“属性检查器”中)
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 3;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *identifier = [NSString stringWithFormat:@"Cell%d", indexPath.row + 1];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier forIndexPath:indexPath];
cell.textLabel.text = identifier; // just show the identifier as title
return cell;
}
你说它在报道: 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[NSIndexPath setTableViewStyle:]:发送到实例0x83812e0的选择器无法识别 当
cellforrowatinedexpath
未返回有效的UITableViewCell
时,就会出现这种情况
您从表视图:numberofrowsinssection:
返回了什么值?我询问的原因是您的cellForRowAtIndexPath
对于除第一行以外的任何行都将失败。如果您的表格视图:numberofrowsinssection:
指示的值大于1,则您的应用程序将崩溃
要确认这一点,您可能需要检查cellforrowatinedexpath
开头的indepath
是什么,方法的开头添加以下行:
NSLog(@"%s: section = %d; row = %d", __FUNCTION__, indexPath.section, indexPath.row);
这样,您就可以确保要为哪些行生成单元格,并且正确地处理了这些行
后来你说:
我还尝试将cellforRowAtIndexPath中的if语句更改为if(myTable.indexPathForSelectedRow==0)。这会在所有单元中生成动态原型,但至少应用程序不会停止
这显然是行不通的,这意味着对cellforrowatinexpath
的工作原理感到困惑。它与当前选定的单元格无关。您通过告诉它您可以创建哪些单元格来响应numberOfSectionsInTableView
和tableView:numberofrowsinssection:
,然后iOS将调用cellforrowatinex