0

上にあるこのtableViewをUIView正しく機能させることができません。何が起こるかというと、セルのアクセサリ ビューでチェック マークが表示されviewDidLoad、すべてのセルにそのチェック マークが表示されるようにしたいということです。Select allそのため、コードでボタンを「タップ」します。

[self.selectToggleButton sendActionsForControlEvents:UIControlEventTouchUpInside];

しかし、これを行うと、スクロールできません、またはスクロールできますが、ボタンをtableViewタップするまで常に最初の位置に戻るため、下までスクロールできず、正常に動作します。Select all

ここに画像の説明を入力

プラグママーク - IBActions

- (IBAction)selectAllRows:(id)sender {
    
    [self.selectedSongs removeAllObjects];
    [self.selectedCells removeAllObjects];
    NSUInteger numberOfSections = [self.tableView numberOfSections];
    for (NSUInteger s = 0; s < numberOfSections; ++s) {
        NSUInteger numberOfRowsInSection = [self.tableView numberOfRowsInSection:s];
        for (NSUInteger r = 0; r < numberOfRowsInSection; ++r) {
            NSIndexPath *idxPath = [NSIndexPath indexPathForRow:r inSection:s];
            [self.selectedCells addObject:idxPath];
            [self.selectedSongs addObject:self.allSongs[idxPath.row]];
        }
    }
    [self.tableView reloadData];
}



- (IBAction)deselectAll:(id)sender {
    [self.selectedSongs removeAllObjects];
    [self.selectedCells removeAllObjects];
    [self.tableView reloadData];
}


- (IBAction)toggleAll:(UIButton *)sender
{
    if ([self.allSongs count] == [self.selectedSongs count]) {
                [sender setTitle:@"Select all" forState:UIControlStateNormal];
        [self deselectAll:sender];
    } else {
        [sender setTitle:@"Deselect all" forState:UIControlStateNormal];
        [self selectAllRows:sender];
    }
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.allSongs.count;
}
4

0 に答える 0