3

我有一个UITableViewController根据用户先前的选择动态填充的。在某些情况下,用户应该能够选择表中的多行,但在其他情况下,他不应该。无论哪种情况,我都想自动选择第一行,但我发现它只在我有allowsMultipleSelection = YES.

以下代码在期间调用-(void)viewDidLoad

switch(self.field)
{
    case people:
       self.options = (NSArray *)[data objectForKey:@"People"];
       self.tableView.allowsMultipleSelection = YES;
       enter code here break;
    case place:
        self.options = (NSArray *)[data objectForKey:@"Places"];
        self.tableView.allowsMultipleSelection = NO;
        break;
    case reason:
        self.options = (NSArray *)[data objectForKey:@"Reasons"];
        self.tableView.allowsMultipleSelection = NO;
        break;
}

[self.tableView reloadData];
NSIndexPath *zeroPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView selectRowAtIndexPath:zeroPath animated:NO scrollPosition:UITableViewScrollPositionNone];

这适用于“人”案例,但不适用于其他案例。我尝试设置allowMultipleSelectionYES并解决了选择问题,但在应用程序逻辑方面它是不可接受的。

我是否缺少有关这些功能如何工作的信息?如何以编程方式在单个选择表中选择一行?

4

2 回答 2

9

使用模板中的以下内容进行了修复:

// Uncomment the following line to preserve selection between presentations.
self.clearsSelectionOnViewWillAppear = NO;

仍然不确定为什么它以前不起作用。

于 2012-08-17T12:54:27.223 回答
2
for (NSIndexPath *indexPath in [self.tableView indexPathsForSelectedRows]) {
    [self.tableView deselectRowAtIndexPath:indexPath animated:NO];
}
[self.tableView selectRowAtIndexPath:zeroPath animated:NO scrollPosition:UITableViewScrollPositionNone];
于 2012-08-17T12:45:47.473 回答