上にあるこの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;
}