0

私の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];

}
4

1 に答える 1

0

どうでも。tableViewセルに追加しているtextFieldsを再利用する代わりに、それぞれに一意のtextFieldを作成し、セグメントコントロールに基づいてそれらをテストして削除しました。

そのような:

if ([mySegmentControl selectedSegmentIndex] == 0) {

        if (latField) {
            [latField removeFromSuperview];
            [longField removeFromSuperview];
            [latRadiusField removeFromSuperview];
            [latApiKeyField removeFromSuperview];
        }

次に、textFieldsをセルのサブビューに追加します。セグメント==1の場合はその逆になります。

于 2012-12-17T21:13:55.170 に答える