ユーザーがセルを選択すると、選択したセルのインデックスパスを保存し、その下に行を追加します。ユーザーが同じ販売を選択した場合は、その下の行を非表示にします。ユーザが別のセルを選択すると、現在選択されているセルを隠し、新たに選択されたセルの下に新しいセルを表示する。
@interface RCTableViewController()
@property (nonatomic, strong) NSMutableArray *tableViewData;
@property (nonatomic, strong) NSIndexPath *selectedIndexPath;
@end
@implementation RCTableViewController
@synthesize tableViewData = _tableViewData;
@synthesize selectedIndexPath = _selectedIndexPath;
- (void)viewDidLoad
{
[super viewDidLoad];
self.tableViewData = [NSMutableArray arrayWithObjects:
@"Cell 0",
@"Cell 1",
@"Cell 2",
@"Cell 3",
@"Cell 4",
@"Cell 5",
@"Cell 6",
@"Cell 7",
@"Cell 8",
nil];
self.selectedIndexPath = nil;
[self.tableView reloadData];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.tableViewData.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell;
if (indexPath == self.selectedIndexPath) {
static NSString *DropDownCellIdentifier = @"DropDownCell";
cell = [tableView dequeueReusableCellWithIdentifier:DropDownCellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:DropDownCellIdentifier];
}
cell.textLabel.text = @"Drop Down Cell";
} else {
static NSString *DataCellIdentifier = @"DataCell";
cell = [tableView dequeueReusableCellWithIdentifier:DataCellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:DataCellIdentifier];
}
cell.textLabel.text = [self.tableViewData objectAtIndex:indexPath.row];
}
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSIndexPath *dropDownCellIndexPath = [NSIndexPath indexPathForRow:indexPath.row + 1
inSection:indexPath.section];
if (!self.selectedIndexPath) {
// Show Drop Down Cell
[self.tableViewData insertObject:@"Drop Down Cell" atIndex:dropDownCellIndexPath.row];
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:dropDownCellIndexPath]
withRowAnimation:UITableViewRowAnimationTop];
self.selectedIndexPath = indexPath;
} else {
NSIndexPath *currentdropDownCellIndexPath = [NSIndexPath indexPathForRow:self.selectedIndexPath.row + 1
inSection:self.selectedIndexPath.section];
if (indexPath.row == self.selectedIndexPath.row) {
// Hide Drop Down Cell
[self.tableViewData removeObjectAtIndex:currentdropDownCellIndexPath.row];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:currentdropDownCellIndexPath]
withRowAnimation:UITableViewRowAnimationTop];
self.selectedIndexPath = nil;
} else if (indexPath.row == currentdropDownCellIndexPath.row) {
// Dropdown Cell Selected - No Action
return;
} else {
// Switch Dropdown Cell Location
[tableView beginUpdates];
// Hide Dropdown Cell
[self.tableViewData removeObjectAtIndex:currentdropDownCellIndexPath.row];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:currentdropDownCellIndexPath]
withRowAnimation:UITableViewRowAnimationAutomatic];
// Show Dropdown Cell
NSInteger dropDownCellRow = indexPath.row + ((indexPath.row >= currentdropDownCellIndexPath.row) ? 0 : 1);
dropDownCellIndexPath = [NSIndexPath indexPathForRow:dropDownCellRow
inSection:indexPath.section];
[self.tableViewData insertObject:@"Drop Down Cell" atIndex:dropDownCellIndexPath.row];
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:dropDownCellIndexPath]
withRowAnimation:UITableViewRowAnimationAutomatic];
self.selectedIndexPath = [NSIndexPath indexPathForRow:dropDownCellIndexPath.row - 1
inSection:dropDownCellIndexPath.section];
[tableView endUpdates];
}
}
}
@end
私は 'tableView:didSelectRowAtIndexPath'メソッドで、彼は単に選択されたインデックスパスで行をリロードすると思います。そしてカスタムセルのタップで、彼はそれ以上のものを作る。 –