私のtableViewには、セグメント化されたコントロールを含むヘッダーがあります。セグメント0は3行のtableViewを表示し、セグメント1は4行のテーブルビューを表示します。
これらの各セルに、textFieldサブビューを追加しています。したがって、セグメント0には、郵便番号、半径、およびAPIキーを含む3つの行があります。セグメント1では、緯度、経度、半径、APIキーの4つの行があります。ただし、前後に切り替えると、textFieldサブビューが正しく削除されません。(RadiusフィールドとAPI Keyフィールドは同じフィールドですが、切り替えると異なる行に表示されます。)
textFieldsにタグを付けてから、そのタグでtextFieldを削除しようとしましたが、それは不安定でした。textFieldの存在をテストしました。存在する場合は、トグルで削除します。(これは以下のサンプルコードにあります。)また、segmentChangedメソッドをいじってみましたが無駄になりました。
私のコードを見てください。これらのサブビューをどこでどのように削除するのが最善かわからないので、ポインタをいただければ幸いです。
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if ([mySegmentControl selectedSegmentIndex] == 0) {
return 3;
} else {
return 4;
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if(cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
if ([mySegmentControl selectedSegmentIndex] == 0) {
if (latField) {
[latField removeFromSuperview];
[longField removeFromSuperview];
[radiusField removeFromSuperview];
[apiKeyField removeFromSuperview];
}
if ([indexPath row] == 0 && [indexPath section] == 0) {
zipCodeField = [[UITextField alloc] initWithFrame:CGRectMake(135, 10, 145, 30)];
[[cell textLabel] setText:@"Zip Code:"];
[cell.contentView addSubview:zipCodeField];
} else if ([indexPath row] == 1 && [indexPath section] == 0) {
radiusField = [[UITextField alloc] initWithFrame:CGRectMake(135, 10, 145, 30)];
[[cell textLabel] setText:@"Radius:"];
[cell.contentView addSubview:radiusField];
} else if ([indexPath row] ==2 && [indexPath section] == 0) {
apiKeyField = [[UITextField alloc] initWithFrame:CGRectMake(110, 10, 145, 30)];
[[cell textLabel] setText:@"API Key:"];
[cell.contentView addSubview:apiKeyField];
}
else if ([mySegmentControl selectedSegmentIndex] == 1) {
if (zipCodeField) {
[zipCodeField removeFromSuperview];
[radiusField removeFromSuperview];
[apiKeyField removeFromSuperview];
}
if ([indexPath row] == 0 && [indexPath section] == 0) {
latField = [[UITextField alloc] initWithFrame:CGRectMake(135, 10, 145, 30)];
[[cell textLabel] setText:@"Latitude:"];
[cell.contentView addSubview:latField];
} else if ([indexPath row] ==1 && [indexPath section] == 0) {
longField = [[UITextField alloc] initWithFrame:CGRectMake(135, 10, 145, 30)];
[[cell textLabel] setText:@"Longitude:"];
[cell.contentView addSubview:longField];
} else if ([indexPath row] ==2 && [indexPath section] == 0) {
radiusField = [[UITextField alloc] initWithFrame:CGRectMake(135, 10, 145, 30)];
[[cell textLabel] setText:@"Radius:"];
[cell.contentView addSubview:radiusField];
} else if ([indexPath row] == 3 && [indexPath section] == 0) {
apiKeyField = [[UITextField alloc] initWithFrame:CGRectMake(110, 10, 145, 30)];
[[cell textLabel] setText:@"API Key:"];
[cell.contentView addSubview:apiKeyField];
}
}
return cell;
}
- (IBAction)segmentChanged:(id)sender {
[storeFinderTableView reloadData];
}