【问题标题】:How to highlight a row in a UITableView如何突出显示 UITableView 中的一行
【发布时间】:2010-12-23 12:23:13
【问题描述】:

下面的代码似乎没有效果。我希望它以与点击一行时突出显示的方式相同的方式突出显示

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
   ...
   [cell.textLabel setHighlighted:YES];


   return cell;
}

【问题讨论】:

  • 这个post 可能会有所帮助。

标签: iphone objective-c cocoa-touch uitableview


【解决方案1】:

此行将为您处理单元格、标签和附件的重绘:

[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];

【讨论】:

    【解决方案2】:

    正如其他人所指出的,您可以使用此方法以编程方式选择单元格:

     [tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
    

    但是,您应该小心不要过早调用此方法。

    包含tableView的视图控制器第一次是initialized,最早应该在viewDidAppear:内调用该方法。

    所以,你应该这样做:

    - (void)viewDidAppear:(BOOL)animated
    {
       NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; // set to whatever you want to be selected first 
       [tableView selectRowAtIndexPath:indexPath animated:NO  scrollPosition:UITableViewScrollPositionNone];
    }
    

    如果您尝试将此调用放入 viewDidLoadviewWillAppear: 或任何其他早期视图生命周期调用中,它可能无法正常工作或产生奇怪的结果(例如滚动到正确的位置但未选择单元格)。

    【讨论】:

    • 在 iOS 9 上似乎可以在 viewWillApearviewDidAppear 上运行,而不是在 viewDidLoad 上运行。
    【解决方案3】:
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:1 inSection: 0];
    
    [tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
    

    通常有效

    如果您使用界面生成器来构建界面,要检查的一件事是您指定了表视图控制器的视图。如果您实际上没有指定视图,则此选择消息可能无处可去。

    (您可以通过在界面构建器检查器窗口中选择表视图控制器并将“视图”的出口拖动到要在其中进行选择的表视图来指定视图。

    【讨论】:

      【解决方案4】:
      - (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
         return YES;
      }
      
      - (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
        // do something here
      }
      

      试试这个:)

      【解决方案5】:

      您可以使用

      - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
      {
         ...
         [cell.textLabel setHighlighted:YES];
      
      
         return cell;
      }
      

      【讨论】:

        【解决方案6】:

        你有两个选择。要么使用表格视图的选择:

        [tableView selectRowAtIndexPath: indexPath animated: YES scrollPosition: UITableViewScrollPositionNone];
        

        或者改变表格视图委托中表格单元格的背景颜色:

        - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
            cell.backgroundColor = ...
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-17
          • 1970-01-01
          • 2012-02-19
          • 1970-01-01
          相关资源
          最近更新 更多