4

複数選択UITableViewでいくつかの行を事前に選択したい。

tableView:willDisplayCell:forRowAtIndexPath:を設定するだけでこれを行います[cell setSelected:YES animated:NO];

ただし、何らかの理由で、これらの行の選択解除が無効になります。埋め込みコントロールは引き続き機能し、詳細開示ボタンも機能します。

ここにサンプル プロジェクトをアップロードしました: https://github.com/leberwurstsaft/TableViewIssueで動作を確認できます ( 49 ~ Viewcontroller.m51 行目)。

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    [cell setSelected:NO animated:NO]; //   -->   setSelected:YES and the cells can't be deselected anymore...
}

問題に見えるのは?

4

4 に答える 4

10

セルを選択済みとして設定するだけでなく、セルが選択されていることを tableView に通知する必要もあります。-tableView:selectRowAtIndexPath:animated:scrollPosition:method:への呼び出しを追加するとwillDisplayCell:、通常どおり選択を解除できます。

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (/*should be selected */) {
        [cell setSelected:YES animated:NO]; 
        [tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
    }
}

これは @Ivan Loya のソリューションに似ていますが、既に使用していたのと同じ方法で実行できます。UITableViewScrollPositionNone奇妙なスクロール動作を避けるために必ず使用してください。

于 2014-08-06T16:38:12.717 に答える
5

ビューでこれを試してみてください、私のために働く

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

あなたのviewController.hにテーブルビューを追加してリンクします

@property (weak, nonatomic) IBOutlet UITableView *tableView;

willDisplayCell関数の行をコメント化します

于 2013-09-07T18:58:22.637 に答える
1

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath選択を入れて、そこに選択を切り替える必要があると思います。

各行のチェックマークを切り替えたい同様の状況で私が行うことは次のとおりです

(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{       
    [tableView deselectRowAtIndexPath:indexPath アニメーション:NO];

    UITableViewCell *newCell = [tableView cellForRowAtIndexPath:indexPath];

    Person * person = [self.contactTable objectAtIndex:indexPath.row];

        if (newCell.accessoryType == UITableViewCellAccessoryNone)
        {
            newCell.accessoryType = UITableViewCellAccessoryCheckmark;
            person.isMatch = [NSNumber numberWithBool:YES];
            self.countChecked ++ ;


        }そうしないと
        {
            newCell.accessoryType = UITableViewCellAccessoryNone;
            person.isMatch = [NSNumber numberWithBool:NO];
            self.countChecked -- ;
        }
}
于 2013-09-07T18:50:45.913 に答える