Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用与nib文件中指定的单元标识符不同的单元标识符加载tableview单元_Ios_Nib_Identifier_Tableviewcell_Loadnibnamed - Fatal编程技术网

Ios 如何使用与nib文件中指定的单元标识符不同的单元标识符加载tableview单元

Ios 如何使用与nib文件中指定的单元标识符不同的单元标识符加载tableview单元,ios,nib,identifier,tableviewcell,loadnibnamed,Ios,Nib,Identifier,Tableviewcell,Loadnibnamed,//实际问题 在加载nib文件(tableviewcell)时,我需要使用与nib中指定的单元标识符不同的单元标识符的帮助 //我正在做的事情的背景信息 我有一个自定义的UITableViewCell,它几乎没有标签、图像和按钮。所有这些都放在一个nib文件中。tableview单元格的内容需要根据特定条件动态更改,即如果未显示按钮;如果标签中没有要显示的内容,则不会显示标签等。左侧相邻的标签/视图应延伸以填充缺少的标签/按钮的空间 我能让它工作。我这样做的方式是在cellforrowatine

//实际问题
在加载nib文件(tableviewcell)时,我需要使用与nib中指定的单元标识符不同的单元标识符的帮助

//我正在做的事情的背景信息
我有一个自定义的UITableViewCell,它几乎没有标签、图像和按钮。所有这些都放在一个nib文件中。tableview单元格的内容需要根据特定条件动态更改,即如果未显示按钮;如果标签中没有要显示的内容,则不会显示标签等。左侧相邻的标签/视图应延伸以填充缺少的标签/按钮的空间

我能让它工作。我这样做的方式是在
cellforrowatinexpath
I
-使用
removeFromSuperView

-调整
并调用
setNeedsDisplay
以查看需要调整的视图

我使用nib文件中提到的同一个单元标识符将该单元出列。如果返回的单元格为nil,则我使用
loadNibNamed:withOwner:options
加载nib。但是,我担心在来回滚动时会出现问题,因为被重用的单元格可能没有在不满足条件时显示内容所需的视图,因为这些条件可能已经被删除

为了解决这个问题,我计划为不同的条件使用不同的单元标识符,从而触发不同的单元外观。或者,我也考虑只隐藏视图,并将相邻视图扩展到隐藏视图上。这样我就不需要处理不同的单元标识符

Edit2:
我的另一种隐藏和调整相邻视图框架的方法满足了我的需要

然而,我仍然想找到我上述实际问题的答案

//潜在解决方案
我想知道是否可以通过
loadNibNamed
函数的
options
参数将单元格标识符传递给nib加载代码。这可能吗?如果你们能提供一个示例代码来实现这一点,那就太棒了


谢谢您的时间。

您只需在nib中创建多个具有不同标识符的单元格,然后使用适当的标识符调用
dequeueReusableCellWithIdentifier
,以获取对适当类型单元格的引用。

您不能更改nib中指定的单元格重用标识符笔尖你正在谈论的选项词典也不会为你做这件事。这些选项与nib中的代理对象相关

与其删除子视图,不如简单地隐藏它们。您可以使用IBOutletCollections来简化批量隐藏/取消隐藏。如果需要,您可以在
prepareforeuse
中将单元格重置为默认状态


看看UINib——这比loadNibNamed更快地从nob创建对象,这将有助于提高滚动性能

我对这个解决方案不是很自豪,可能会遇到问题,但我会在从nib加载后尝试设置单元格的标识符

- (id)initWithReuseIdentifier:(NSString *)reuseIdentifier
{
    self = [[NSBundle mainBundle] loadNibNamed:@"MyCell" owner:nil options:nil].lastObject;
    [self setValue:reuseIdentifier forKeyPath:@"_reuseIdentifier"];

    // ...

    return self;
}

这是一个带有原型单元的故事板,还是您的自定义单元位于自己的nib中?自定义单元位于自己的nib中;没有故事板。感谢您的回复;我想了想,但后来不想走这条路,因为这意味着我创建了几乎相同单元格的n个拷贝,但略有变化。这样做的坏处是,对视图进行轻微调整会变得很麻烦,因为我必须在多个副本中进行更改。我现在为iPhone和iPad提供了一个单独的nib,当我需要对两个版本中都可用的视图进行一个小的更改时,这本身就让我抓狂。好的,但你的问题是关于将单元格标识符传递给nib加载代码。这就是它的作用…抱歉,如果不是很明显,我的问题更多的是向loadNibNamed函数传递一个单元格标识符,这样我就可以动态创建具有不同标识符的单元格,而不必在每次加载nib文件时复制单元格并创建单元格对象的多个副本。与其将它们都放在不同的nib中,不如将它们放在一个nib中。在您调用dequeueReusableCellWithIdentifier之前,它不会实际加载它们:因此,当您加载多个nib时,实际上会产生额外的开销。