不在 UITableView 中时如何设置 UITableViewCell 的选定背景颜色

Posted

技术标签:

【中文标题】不在 UITableView 中时如何设置 UITableViewCell 的选定背景颜色【英文标题】:How to set selected background color of UITableViewCell when not in UITableView 【发布时间】:2013-06-05 00:10:37 【问题描述】:

我不明白为什么这很重要,但我在让它工作时遇到了一些麻烦。

免责声明:这是我的第一个 ios 应用程序(或任何 Apple 开发的应用程序,该应用程序需要昨天完成,所以请原谅任何匆忙的代码)。

当单击主视图导航控制器上的按钮时,我正在使用 SWRevealViewController 库创建 Facebook 式的“侧视图”。效果很好,喜欢。这个视图包含一个只有两个静态单元格的 UITableView,我刚刚收到一个请求,将一个单元格添加到视图的最底部。

尝试将第三个单元格“放入”UITableView 似乎并不明显,因此在我的 xib 中,我只是在 UITableView 之外创建了一个 UITableViewCell,并将其放在视图的底部。然后它使用标准的 IBOutlet 工作流将它连接到我的控制器。

返回到我的 viewDidLoad,我将 rogue cell 蒙皮使其看起来像其余的 tablecells,添加了一些措辞,添加了一个处理程序以使其在单击时打开我公司的网站,所有这些都可以正常工作。我为 tableView:cellForRowAtIndexPath 函数中的“常规”表格单元格做了所有这些事情。

但是由于某种原因,当我单击单元格时,当我单击它时,它并没有像其他常规单元格一样突出显示!为什么!

代码:

- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
     else 
        [[cell.contentView viewWithTag:1] removeFromSuperview];
    

    UILabel *lblView = [[UILabel alloc] initWithFrame:CGRectMake(20.0, 3.0, 187.0, cell.frame.size.height)];
    [lblView setFont:[UIFont fontWithName:@"FuturaStd-Bold" size:12]];
    lblView.textColor = [UIColor colorWithRed:(255/255.f) green:(241/255.f) blue:(204/255.f) alpha:1.0];
    lblView.tag = 1;
    if (indexPath.row == 0)
        [lblView setText:@"SCHEDULE"];
     else if (indexPath.row == 1)
        [lblView setText:@"SPEAKERS"];
    
    lblView.backgroundColor=[UIColor clearColor];

    [cell.contentView addSubview:lblView];

    UIImageView *av = [[UIImageView alloc] initWithFrame:CGRectMake(20, 20, 277, 58)];
    av.backgroundColor = [UIColor clearColor];
    av.opaque = NO;
    av.image = [UIImage imageNamed:@"blackBar.png"];
    cell.backgroundView = av;

    UIView *bgColorView = [[UIView alloc] init];
    [bgColorView setBackgroundColor:[UIColor colorWithRed:(240/255.f) green:(145/255.f) blue:(62/255.f) alpha:1.0]];
    [cell setSelectedBackgroundView:bgColorView];

    return cell;

上面的代码适用于我的“常规单元格”。返回单元格之前的最后一点是在“被点击”时将背景突出显示为奇怪的橙色。

下面的代码是相同的,但在我的 viewDidLoad 中,它没有在被点击时设置背景突出显示颜色。

- (void)viewDidLoad

    [super viewDidLoad];

    //... stuff

    UILabel *lblView = [[UILabel alloc] initWithFrame:CGRectMake(20.0, 3.0, 187.0, _roguecell.frame.size.height)];
    [lblView setFont:[UIFont fontWithName:@"FuturaStd-Bold" size:12]];
    lblView.textColor = [UIColor colorWithRed:(255/255.f) green:(241/255.f) blue:(204/255.f) alpha:1.0];
    [lblView setText:@"IT'S A SECRET LOL"];
    lblView.backgroundColor=[UIColor clearColor];

    [_roguecell.contentView addSubview:lblView];

    UIImageView *av = [[UIImageView alloc] initWithFrame:CGRectMake(20, 20, 277, 58)];
    av.backgroundColor = [UIColor clearColor];
    av.opaque = NO;
    av.image = [UIImage imageNamed:@"blackBar.png"];
    _roguecell.backgroundView = av;

    UIView *bgColorView = [[UIView alloc] init];
    [bgColorView setBackgroundColor:[UIColor colorWithRed:(240/255.f) green:(145/255.f) blue:(62/255.f) alpha:1.0]];
    [_roguecell setSelectedBackgroundView:bgColorView];

    UITapGestureRecognizer *singleFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
    [_roguecell addGestureRecognizer:singleFingerTap];

也许它与我的 xib 文件有关,我的 UITableView 向下延伸了整个视图,流氓 UITableViewCell “位于”它的“顶部”(但显然不在其中)。我尝试弄乱表格和单元格的位置,但没有任何作用。

感谢阅读。

【问题讨论】:

所以你将流氓单元添加到表视图标题? @verbumdei 不,我的 xib 视图层次结构如下所示:-UIView --UIToolbar --UILabel --UITableView --UITableViewCell 如果您的表格使用静态单元格,您甚至不应该实现表格视图数据源方法。您应该有 IBOutlets 到单元格或 UI 元素本身,并在 viewDiLoad 中填充它们,就像在任何其他标签或图像视图中一样。 @rdelmar 很高兴知道这一点。这说得通。在我的下一次重写期间(我已经从头开始重写了 5 次,因为我想出了更好的方法)我将直接将这些静态单元与 IBOutlets 连接起来。 【参考方案1】:

我最终删除了我的流氓 UITableViewCell,并将 UITableView 中的单元格总数从 2 个增加到 4 个。我删除了我的自定义背景的第三个单元格,没有添加任何文本,禁用了用户交互,并且使用- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 方法设置高度以填满表格的其余部分,只在底部为我的“页脚”单元格留下足够的空间。

【讨论】:

以上是关于不在 UITableView 中时如何设置 UITableViewCell 的选定背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何让 UITableView 设置其单元格的插图而不在整个表格上设置插图?

UITableView:制作单独的部分并添加标题和副标题

如何通过不在全屏 UITableView 的 UIEdgeInsets 中的屏幕上的点传递点击手势:

如何在异步获取 JSON 数据以填充到 UITableView 中时显示 UIActivityIndi​​catorView?

当节点不在视图中时如何删除它?

关闭模式视图时如何在 UITableView 中显示数据