Ios UITableViewCell';s contentView';s使用UISearchDisplayController时内容不可见

Ios UITableViewCell';s contentView';s使用UISearchDisplayController时内容不可见,ios,uitableview,uisearchdisplaycontroller,Ios,Uitableview,Uisearchdisplaycontroller,我编写了一个简单的联系人管理器应用程序,它使用UITableView显示联系人。每个触点显示为标准的UITableViewCell;自定义内容创建为ui按钮和ui标签,作为单元格contentView的子视图添加。My tableviewController的cellForRowAtIndexPath方法包括: UIButton *emailButton; UITableViewCell *cell = [theTableView dequeueReusableCellWith

我编写了一个简单的联系人管理器应用程序,它使用
UITableView
显示联系人。每个触点显示为标准的
UITableViewCell
;自定义内容创建为
ui按钮
ui标签
,作为单元格
contentView
子视图添加。My table
viewController的
cellForRowAtIndexPath
方法包括:

UIButton *emailButton;
UITableViewCell *cell = 
        [theTableView dequeueReusableCellWithIdentifier:@"My Identifier"];
if (cell == nil) 
   {
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                    reuseIdentifier:identifier] autorelease];
     emailButton = [UIButton buttonWithType:UIButtonTypeCustom];
     [emailButton setImage:emailImage forState:UIControlStateNormal];
     emailButton.tag = EMAIL_BUTTON_TAG;
     emailButton.frame = emailButtonFrame;
     [cell.contentView addSubview:emailButton];
   } else {
     emailButton = (UIButton *)[cell viewWithTag:EMAIL_BUTTON_TAG];
   }
... set various attributes of the cell, including the content of custom labels
... added as subviews of the contentView exactly as above
这在渲染我的表时效果很好。但我也在我的应用程序中添加了一个搜索栏,适当地设置了搜索栏的控制器,并将
控制器的
委托设置回相同的
表格控制器
,以便在执行搜索时调用完全相同的
cellforrowatinexpath
方法,当然,我会过滤要显示的单元格集以匹配查询

我看到的是,当我执行搜索时,通过设置
cell.textLabel.text
cell.imageView.image
显示的所有内容都会完美地显示在表中,但电子邮件按钮或我添加为单元格
contentView
子视图的标签不会出现。在调试器中,我可以清楚地看到这些控件(按钮和标签)在搜索筛选进行时调用
cellforrowatinexpath
时存在。但是控件不会渲染

我觉得在表格单元格和
searchView
之间的交互中一定有一些非常微妙的东西,但我没有看到它。

您可以检查一下

identifier in *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                    reuseIdentifier:identifier] autorelease];
等同于
[表格视图带有标识符的可重用单元格:@“我的标识符”
中的“我的标识符”;如果没有,您可以得到空单元格,您可以使用它的cell.imageView和cell.textlab,但没有contentView子视图。

您可以检查

identifier in *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                    reuseIdentifier:identifier] autorelease];

等同于
[表格视图带有标识符的可重用单元格:@“我的标识符”
中的“我的标识符”;如果没有,您可以得到空单元格,您可以使用它的cell.imageView和cell.textlab,但没有contentView子视图。

设置textlab的text属性也会将textlab带到前面。即使文本标签似乎没有与“内容视图”的任何按钮重叠,这也会导致按钮消失。在文本标签更新后,将其强制放在前面可以解决问题


不清楚为什么这种行为只出现在搜索案例中,而不是在正常案例中,但我能够在对iOS“TableSearch”示例的简单更改中重现它。

设置textLabel的text属性似乎也会将textLabel放在前面。即使文本标签似乎没有与“内容视图”的任何按钮重叠,这也会导致按钮消失。在文本标签更新后,将其强制放在前面可以解决问题


不清楚为什么这种行为只出现在搜索案例中,而不是在正常案例中,但我能够在对iOS“TableSearch”示例的一个简单更改中重现它。

您能否详细介绍一下执行搜索时调用cellForRowAtIndexPath方法的情况。您正在过滤一个数组,然后调用tableView的reloadData,而不是自己调用CellForRowatineXpath,对吗?在正常操作下,有一个很大的联系人数组,用户执行的其他操作可能会过滤这些联系人,也可能不会过滤这些联系人。并且表视图正确地调用cellforrowatinexpath来获取滚动时应该呈现的表单元格。当显示搜索栏时,数组将以不同方式过滤(以匹配满足搜索条件的记录)。我的观点是调用CellForRowatineXpath,我返回完全相同的单元格结构——标签、内容等。只有在这种情况下,并不是所有的内容都会被呈现。您能告诉我们一些关于CellForRowatineXpath方法在执行搜索时被调用的更多信息吗。您正在过滤一个数组,然后调用tableView的reloadData,而不是自己调用CellForRowatineXpath,对吗?在正常操作下,有一个很大的联系人数组,用户执行的其他操作可能会过滤这些联系人,也可能不会过滤这些联系人。并且表视图正确地调用cellforrowatinexpath来获取滚动时应该呈现的表单元格。当显示搜索栏时,数组将以不同方式过滤(以匹配满足搜索条件的记录)。我的观点是调用CellForRowatineXpath,我返回完全相同的单元格结构——标签、内容等。只有在这种情况下,并不是所有的内容都被呈现。标识符匹配,单元格确实有一个contentView子视图,我向其中添加了标签和按钮。当单元格正常绘制时,这种方法非常有效,但当它们由UISearchDisplayController管理时,这种方法就不行了。标识符匹配,并且单元格确实有一个contentView子视图,我可以向其中添加标签和按钮。当单元格正常绘制时,这种方法非常有效,但当它们由UISearchDisplayController管理时就不行了。很高兴听到你修复了它,将奖金留给自己并不能恢复你的声誉。我正在选择答案。赏金不是我给的,它会去Ned想去的任何地方。这条小贴士拯救了我的一天,谢谢。我的问题是,升级到ios14后,我们有一些遗留代码运行在objective c上,完全通过编码而不是自动布局来制作合适的单元格很高兴听到你已经修复了它,把奖金留给自己并不能恢复你的声誉。我正在选择答案。赏金不是我给的,它会去Ned想去的任何地方。这个小贴士拯救了我的一天,谢谢。我的问题是,在升级到ios14时,我们有一些运行objective c的遗留代码,完全从