默认情况下如何选择 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 中
如何从自定义操作中进入删除确认状态 UITableViewCell?