在 UITableView 中设置一个显示当前项目的菜单

Posted

技术标签:

【中文标题】在 UITableView 中设置一个显示当前项目的菜单【英文标题】:Setting up a menu in UITableView showing the current item 【发布时间】:2013-05-07 21:28:22 【问题描述】:

我正在使用加载 UITableView 的菜单样式的幻灯片。 - ECSlidingViewController

我在表格视图设置中有大约 7 个单元格,如下所示:

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];


cell.contentView.backgroundColor = [UIColor colorWithRed:75.0/255.0 green:83.0/255.0 blue:102.0/255.0 alpha:1.0];

UIView *topSplitterBar = [[UIView alloc] initWithFrame:CGRectMake(0, 0, cell.bounds.size.width, 1)];
topSplitterBar.backgroundColor = [UIColor colorWithRed:62.0/255.0 green:69.0/255.0 blue:85.0/255.0 alpha:1];

[cell.contentView addSubview:topSplitterBar];

cell.textLabel.backgroundColor = [UIColor clearColor];
cell.textLabel.textColor = [UIColor colorWithRed:196.0/255.0 green:204.0/255.0 blue:218.0/255.0 alpha:1];
cell.textLabel.font = [UIFont systemFontOfSize:18.0f];
cell.textLabel.shadowColor = [UIColor colorWithRed:27.0/255.0 green:31.0/255.0 blue:41.0/255.0 alpha:1];
cell.textLabel.shadowOffset = CGSizeMake(0, 1);

UIView *selectedBg = [[UIView alloc] initWithFrame:cell.frame];
selectedBg.backgroundColor = [UIColor colorWithRed:50.0/255.0 green:56.0/255.0 blue:73.0/255.0 alpha:1];
cell.selectedBackgroundView = selectedBg;

如果这是当前显示的控制器,那么将单元格显示为 selectedBg 的最佳方式是什么?

例如,我可以访问以下内容:

if ([self.slidingViewController.topViewController isKindOfClass:[MESHomeViewController class]]) 

但是,我不确定在哪里进行设置的最佳做法是?我可以在开关盒中进行单元标签设置...例如:

    switch ( indexPath.row ) 
        case 0: 
            if ([self.slidingViewController.topViewController isKindOfClass:[MESHomeViewController class]]) 
                cell.contentView.backgroundColor = [UIColor colorWithRed:50.0/255.0 green:56.0/255.0 blue:73.0/255.0 alpha:1];
            
            cell.textLabel.text = NSLocalizedString(@"LMGames", @"Left Menu - Games");
            break ;

但是,当从菜单中选择一个新项目时,我每次都需要重新加载表格,这样好吗?每次选择一个单元格时填写一个self.tableView reloadData,还是有更好的方法来解决这个问题?

【问题讨论】:

或者也只是在didSelectRowAtIndexPath方法中设置selectedBg 我试图添加这个' UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; cell.contentView.backgroundColor = [UIColor colorWithRed:50.0/255.0 green:56.0/255.0 blue:73.0/255.0 alpha:1]; ' 在 didSelectRowAtIndexPath 部分,但没有发生变化? @iWasRobbed - 好的,我可以使用 BOOL 但仅使用 self tableView reloadData。如果当前显示单元格(因此),这是我检查单元格创建。问题是,这是实现这一目标的最佳方式吗?如果我更改了 didSelectRowAtIndexPath 中的显示,那么如何确保其他单元格背景正确...而不重新加载 tableView 的数据并在那里检查。 只保留对当前选定行和先前选定行的整数引用,然后只刷新这些行***.com/a/5418726/308315 @iWasRobbed - 谢谢,请提交作为不接受的答案。再次感谢 【参考方案1】:

给你两个想法:

    didSelectRowAtIndexPath 方法中设置selectedBg 以设置选定的单元格。 保留对当前选定行和先前选定行的整数引用,然后使用类似于How to reload and animate just one UITableView cell/row? 的方法仅刷新这些行

希望对你有帮助!

【讨论】:

以上是关于在 UITableView 中设置一个显示当前项目的菜单的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UITableView 中设置 UILabel 的动作

如何在 UITableView 中设置动态单元格分隔线? [复制]

以编程方式在 View Controller 中设置 UITableView

Swift - 在 UITableView 中设置清晰的背景颜色

如何在 UITableView 中设置单元格高度?

如何使用 AutoLayout 在一个 UITableView 中设置具有两个原型的 UITableViewCell 的 AutoHeight?