UITableViewCells 出现在 backgroundView 后面
Posted
技术标签:
【中文标题】UITableViewCells 出现在 backgroundView 后面【英文标题】:UITableViewCells appear behind backgroundView 【发布时间】:2010-04-19 00:38:00 【问题描述】:我在将 UITableView 的背景设置为 UIImageView 时遇到问题(请参阅下文了解我这样做的原因),一旦设置了视图,它就可以正常工作,并与 UITableView 一起滚动,但它隐藏了表格视图。
我需要一个 UIImageView 作为 UITableView 的背景。我知道这已经被回答过,但答案是使用:
[UIColor colorWithPatternImage:[UIImage imageNamed:@"myImage.png"]];
或类似的东西(我需要使用):
UIImageView *background = [MainWindow generateBackgroundWithFrame:tableView.bounds];
[tableView addSubview:background];
[tableView sendSubviewToBack:background];
我需要使用后者的原因是因为我的 generateBackgroundWithFrame 方法,该方法需要一个大图像,并在该图像周围绘制一个指定尺寸的边框,并剪切图像的其余部分:
+ (UIImageView *) generateBackgroundWithFrame: (CGRect)frame
UIImageView *background = [[[UIImageView alloc] initWithFrame:frame] autorelease];
background.image = [UIImage imageNamed:@"globalBackground.png"];
[background.layer setMasksToBounds:YES];
[background.layer setCornerRadius:10.0];
[background.layer setBorderColor:[[UIColor grayColor] CGColor]];
[background.layer setBorderWidth:3.0];
return background;
请注意:我知道这可能会影响性能,但我没有资源来为应用中的每个潜在屏幕制作这些图像。请不要用盲目的“你不应该这样做”的回答来回答这个问题。我知道这样做可能是错误的。
如何显示我的 UITableView 控件元素?我的代表有什么做错了吗?这是一个简化的版本:
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell =
[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
cell = [[[UITableViewCell alloc]
initWithFrame:CGRectMake(20, 20, 261, 45)
reuseIdentifier:CellIdentifier] autorelease];
cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
UIImage *rowBackground;
NSString *imageName = @"standAloneTVButton.png";
rowBackground = [UIImage imageNamed:imageName];
UITextView *textView =
[[UITextView alloc] initWithFrame:CGRectMake(0, 5, 300, 200)];
textView.backgroundColor = [UIColor clearColor];
textView.textColor = [UIColor blackColor];
textView.font = [UIFont fontWithName:@"Helvetica" size:18.0f];
Purchase *purchase =
[[PurchaseModel productsPurchased] objectAtIndex:indexPath.row];
textView.text = [purchase Title];
selectedTextView.text = textView.text;
UIImageView *normalBackground =
[[[UIImageView alloc] init] autorelease];
normalBackground.image = rowBackground;
[normalBackground insertSubview:textView atIndex:0];
cell.backgroundView = normalBackground;
[textView release];
return cell;
【问题讨论】:
【参考方案1】:所以到目前为止这个问题的答案是给背景视图添加一个标签,然后执行以下操作:
- (void)tableView: (UITableView *)tableView willDisplayCell: (UITableViewCell *)cell forRowAtIndexPath: (NSIndexPath *)path
[tableView sendSubviewToBack:[tableView viewWithTag:BACKGROUNDVIEW_TAG]];
我不太喜欢这个,因为我对每个单元格都这样做,但我似乎找不到allCellsDidLoadForTableView: (UITableView *)tableView
之类的方法。
【讨论】:
我已经为这个问题疯狂了一整天!目前我还没有找到更好的解决方案。非常感谢!以上是关于UITableViewCells 出现在 backgroundView 后面的主要内容,如果未能解决你的问题,请参考以下文章
UITextField 值在滚动时消失并重新出现在其他 UITableViewCells [重复]
从 Firebase 提取的数据中没有出现 UITableViewCells