我有一个UITableView
与可重新配置的行,我使用标准UITableViewCell.text
属性来显示文本。当我点击编辑,移动一行,点击完成,然后点击该行,内置的UILabel
变为完全白色(文本和背景)和不透明,单元格的蓝色阴影不显示在它后面。是什么赋予了?有没有我应该做的事情,我不是?我有一个哈克修理,但我想要真正的麦考伊。移动UITableView行后,选择它,它只在边缘变为蓝色
下面是如何重现它:
与在iPhone OS 2.2.1 SDK标准 “为基础的导航应用程序” 模板开始:
打开RootViewController.m
取消注释
viewDidLoad
,并启用编辑按钮:- (void)viewDidLoad { [super viewDidLoad]; // Uncomment the following line to display an Edit button in the navigation bar for this view controller. self.navigationItem.rightBarButtonItem = self.editButtonItem; }
指定表中有一些细胞:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 4; }
在
tableView:cellForRowAtIndexPath:
,添加一行来设置单元格的文本属性,因此使用内置的UILabel子视图:// Set up the cell... cell.text = @"Test";
要启用重新排序,取消注释
tableView:moveRowAtIndexPath:toIndexPath:
。默认实现是空白的,在这种情况下很好,因为模板不包含数据模型。配置模拟器OS 2.2.1 Build and Go的项目。当应用程序出现时,点击编辑,然后将任何行滑动到新的位置,点击完成,然后点击每行一个。通常,水龙头会选择一行,将其变为蓝色,并将其文本变成白色。但是,您刚刚移动的那一行上的一个水龙头,和会将UILabel的背景颜色留为白色。其结果是一个令人困惑的白色开放空间,边缘有蓝色条纹。奇怪的是,在第一个虚假的水龙头之后,出现了另一个龙头来纠正这个问题。
到目前为止,我发现了一个修复它的黑客攻击,但我并不满意。它的工作原理是确保内置的UILabel
是不透明的,并且在选择后立即没有背景色。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// hacky bugfix: when a row is reordered and then selected, the UILabel displays all crappy
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
for (UIView *view in cell.contentView.subviews) {
if ([[view class] isSubclassOfClass:[UILabel class]]) {
((UILabel *) view).backgroundColor = nil;
view.opaque = NO;
}
}
// regular stuff: only flash the selection, don't leave it blue forever
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
这似乎工作,但我不认为它永远是一个好主意。什么是解决这个问题的正确方法?
+1在选择笔记上。选择并不意味着长时间显示! (我们在几款应用中遇到了这个问题) – 2009-03-01 03:59:26
I concur;我们只是rev'd填字游戏,以消除使用突出显示的行来指示持久选择 – 2009-03-01 19:47:56