UIPicker
選択した行を緑色のテキストで表示するを取得しようとしています。メソッドを使用pickerView:viewForRow:forComponent:reusingView:
して UILabel を作成します。
- (UIView*) pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
UILabel *label = (UILabel*)view;
if (label == nil) {
label = [UILabel new];
label.font = [UIFont boldSystemFontOfSize: 24];
label.adjustsFontSizeToFitWidth = YES;
}
UIColor *color = (row == [pickerView selectedRowInComponent: component]) ? RGBx(0x579B2F) : UIColor.whiteColor;
label.textAlignment = component == 0 ? NSTextAlignmentRight : NSTextAlignmentLeft;
NSMutableAttributedString *string;
if (component == 0) {
string = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%3lu.", row]];
[string addAttribute:NSForegroundColorAttributeName value: color range:NSMakeRange(0, string.length - 1)];
[string addAttribute:NSForegroundColorAttributeName value: [UIColor clearColor] range:NSMakeRange(string.length - 1,1)];
}
else {
string = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@".%02lu", row % 60]];
[string addAttribute:NSForegroundColorAttributeName value: [UIColor clearColor] range:NSMakeRange(0,1)];
[string addAttribute:NSForegroundColorAttributeName value: color range:NSMakeRange(1,string.length - 1)];
}
label.attributedText = string;
return label;
}
そこには、2 つのホイールを密接に配置するための追加要素がいくつかありますが、少し間隔を空けています (透明な期間)。それは主に動作します:
最初は、緑の選択と白/灰色の選択が完璧に見えます。問題は、ホイールをスクロールしても常に緑色になるとは限らないことです。時々そうしますが、常にではありません。ご覧のとおり、スクロールされた値は、選択されていなくても緑色のままになることがあります (09
右上隅の を参照)。
緑のみを選択した行に常に保持するにはどうすればよいですか?