【问题标题】:How do I select a UITableViewCell by default?默认情况下如何选择 UITableViewCell?
【发布时间】:2009-08-24 16:43:43
【问题描述】:

我创建了一个UITableView,并希望在加载视图时显示一个特定的UITableViewCell(蓝色)。

【问题讨论】:

标签: iphone ios cocoa-touch uitableview


【解决方案1】:
-(void)viewWillAppear:(BOOL)animated {
    // assuming you had the table view wired to IBOutlet myTableView
    // and that you wanted to select the first item in the first section
    [myTableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] 
                             animated:NO 
                       scrollPosition:UITableViewScrollPositionTop];
}

我正在使用这种技术从两个UITableViewCells 中选择一个,这样用户就可以知道表格视图下方的UIDatePicker 会影响哪个单元格。当您创建新事件并设置日期时,Apple 在日历应用程序中使用此技术。

【讨论】:

  • 1.这对我不起作用。 2. 苹果说你应该使用复选标记来指示一个项目的选择状态。
【解决方案2】:

请谨慎使用此方法,因为以这种方式选择行是Apple suggests against 为显示“已选择”状态所做的事情。

请考虑将单元格的accessoryType 属性设置为UITableViewCellAccessoryCheckmark 之类的值。

【讨论】:

  • 当您在日历应用程序中添加/编辑事件并设置开始和结束日期/时间时,我正在尝试复制 Apple 使用的 UI。我在其他地方看到了关于复选标记规则的 cmets,但不确定它是否适用于这种情况(该表用于布局组件而不是呈现数据列表)。
  • 这是一个有趣的观点。在这种情况下,它们不需要每个 Starts 和 Ends 都有一个子视图,因为它们都表示相同类型的数据,由相同类型的 UIPickerView 修改。所以这将代表一个明智的使用。他们很可能使用 UITableView 的 selectRowAtIndexPath:animated:scrollPosition: 方法...见tinyurl.com/yd9zs65
【解决方案3】:

你应该把它放在viewWillAppear

[myTableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] 
                         animated:NO 
                   scrollPosition:0];

如果你尝试在cellForRowAtIndexPath:中选择它,那么它将不会采用所需的样式。

【讨论】:

    【解决方案4】:

    一定要小心。我相信您有充分的理由,但请仔细查看 Apple 提供的人机界面指南文档。应用程序因未取消选择表行而被拒绝。我鼓励您找到 HIG 的相应部分,并查看 Apple 提供的任何建议。

    【讨论】:

      【解决方案5】:

      使用此代码在表格视图中默认选择单元格,indexPath 可以根据您的需要而变化

      -(void)viewDidAppear:(BOOL)animated {
          [super viewDidAppear:animated];
          NSIndexPath *indexPath=[NSIndexPath indexPathForRow:0 inSection:0];
          [theTableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionBottom];
      }
      

      【讨论】:

        【解决方案6】:

        使用 UITableViewCell 方法

        - (void)setSelected:(BOOL)selected animated:(BOOL)animated
        

        信息here

        【讨论】:

        【解决方案7】:

        有时,当您不在UIViewController 中时,您没有viewWillAppear,有时您以编程方式创建了UITableView

        简单的解决方案是实现这个delegate 方法:

        - (void)tableView:(UITableView *)tableView 
                willDisplayCell:(UITableViewCell *)cell 
                forRowAtIndexPath:(NSIndexPath *)indexPath {
        
            if (self.selectedIndex == indexPath.row) {
                cell.selected = YES;
            }
        }
        

        它在cellForRowAtIndexPath 中不起作用,因为该单元格尚未显示。而setSelected 方法会在这个显示时被调用。

        【讨论】:

          猜你喜欢
          • 2016-04-15
          • 2011-08-01
          • 1970-01-01
          • 2014-03-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-02-01
          相关资源
          最近更新 更多