默认情况下如何选择 UITableViewCell?

Posted

技术标签:

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

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

【问题讨论】:

看到这个问题:***.com/questions/19295297/… 【参考方案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。

【讨论】:

也许以下方法更适合? developer.apple.com/iphone/library/documentation/UIKit/…: 哪种方法?该链接不指向任何特定方法 哦,如果找到它,那一个突出显示它并没有选择它,我想如果这就是提问者想要的那么肯定那更合适【参考方案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 方法会在这个显示时被调用。

【讨论】:

以上是关于默认情况下如何选择 UITableViewCell?的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有自定义单元格的情况下将文本包装在 UITableViewCell 中

iOS)如何添加uitableviewcell的默认分隔符

如何从自定义操作中进入删除确认状态 UITableViewCell?

选择时如何更改 UITableViewCell 的颜色?

在 iOS 8 中如何在不使用自动布局的情况下布局 UITableViewCell?

使用 rxswift 禁用 UITableViewCell 编辑模式