我编写了一个简单的联系人管理器应用程序,它使用UITableView
来显示联系人。每个联系人都显示为标准UITableViewCell
;自定义内容创建为UIButtons
和UILabels
,并添加为单元格subviews
的{{1}}。我的表contentView
viewController's
方法包括:
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
代理设置回同一个controller's
,使得完全相同的tableController
方法是在执行搜索时调用,当然我会过滤要显示的单元格集以匹配查询。
我看到的是,当我执行搜索时,通过设置cellForRowAtIndexPath
或cell.textLabel.text
显示的所有内容都会在表格中完美显示,但是emailButton或我添加的标签单元格cell.imageView.image
的{{1}}未显示。在调试器中,我可以清楚地看到这些控件(按钮和标签)在搜索过滤进行时subviews
被调用时存在。但控件不会渲染。
我觉得表格单元格与contentView
之间的交互必须有一些非常微妙的东西,但我很想念它。
答案 0 :(得分:2)
设置textLabel的text属性似乎也将textLabel置于前面。即使文本标签看起来与任何内容视图的按钮都不重叠,这也会导致按钮消失。 更新textLabel后强制它们到前面会使问题消失。
目前尚不清楚为什么这种行为只出现在搜索案例中而不是正常情况下,但我能够通过对iOS“TableSearch”示例的简单更改来重现它。
答案 1 :(得分:1)
你可以检查一下
identifier in *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:identifier] autorelease];
等同于[theTableView dequeueReusableCellWithIdentifier:@"My Identifier"]
中的 “我的标识符” ;如果没有,你可以得到空单元格,你可以使用它的cell.imageView和cell.textLabel,但没有contentView子视图。