0

カスタム uitableviewcell では、行の作成時にセグメント化されたコントロールが作成されます。各行は、フォーム内の質問です。質問のタイプに応じて、セグメント化されたコントロールは異なる回答を持つことができます。UISegmentedControl リファレンスでは、すべてのセグメントを一度に設定できる init メソッドのみがリストされています。remove と insert を使用してセグメントを更新し、関連するセグメントを持つよりも良い方法はありますか?

カスタム UITableView セルの init には、

_answerSegmented = [[UISegmentedControl alloc] init];
[_answerSegmented addTarget:self action:@selector(answerChanged:) forControlEvents:UIControlEventValueChanged];
_answerSegmented.backgroundColor = [UIColor columnHeaderBackground];
[self addSubview:_answerSegmented];

セグメントがどうあるべきかを知るのは後になってからです

NSMutableArray *answers = [NSMutableArray arrayWithObjects:@"IN", @"OUT", nil];
if (_question.noItem.boolValue) {
    [answers addObject:@"N/O"];
}
if (_question.naItem.boolValue) {
    [answers addObject:@"N/A"];
}
_answerSegmented.segments = answers; // <---- this line gives a compile error
4

1 に答える 1

5

いいえ、これ以上の方法はありません。セグメント化されたすべてのコントロールに同じ数のセグメントがある場合は、その数のセグメントでコントロールを作成します。次に、 を使用setTitle:forSegmentAtIndex:して、各セグメントのタイトルを一度に 1 つずつ変更します。

数値が変わる可能性がある場合は、 と を使用removeAllSegmentsinsertSegmentWithTitle:atIndex:animated:ます。

または、単純に新しいセグメント化されたコントロールを作成し、毎回古いコントロールを削除します。

于 2014-06-10T17:24:12.857 に答える