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];

これは、「People」のケースでは正しく機能しますが、他のケースでは正しく機能しません。に設定allowMultipleSelectionしてみましYESたが、選択の問題は解決しましたが、アプリケーション ロジックの観点からは受け入れられません。

これらの機能がどのように機能するかについて何か不足していますか? 単一の選択テーブルの行をプログラムで選択するにはどうすればよいですか?

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 に答える