8

のテキストを右揃えにするにはどうすればよいUIPickerViewですか? 行ビューのカスタム を作成しようとしましUILabelたが、何らかの理由で、右揃えなどで何も表示されません。ここに私が書いたものがあります:

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectZero];
    [label setText:[NSString stringWithFormat:@"row %d", row]];
    [label setTextAlignment:UITextAlignmentRight];
    return [label autorelease];
}

誰かが疑問に思っている場合に備えCGRectZeroて、例で見たので使用しましたUICatalog

4

4 に答える 4

8

特定のコンポーネントの行のタイトルを設定するために、ピッカーと 2 つの配列で 2 つのコンポーネントを取得しました。

以下のコードは、ピッカーのデフォルトのフォントとフォントサイズでピッカーデータを中央に表示します。ピッカーデータの中央揃えで正確なピッカーデータ表示動作を提供します。

ここ、

NSArray *component1Array=[NSArray arrayWithObjects:@"0 lbs",@"1 lbs",@"2 lbs",@"3 lbs",@"4 lbs",@"5 lbs",nil];

NSArray *component2Array=[NSArray arrayWithObjects:@"0.00 oz",@"0.25 oz",@"0.50 oz",@"0.75 oz",@"1.00 oz",nil];

     - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
        {
             //I have taken two components thats why I have set frame of my "label" accordingly. you can set the frame of the label depends on number of components you have... 

             UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 145, 45)];

             //For right alignment of text,You can set the UITextAlignmentRight of the label.  
             //No need to set alignment to UITextAlignmentLeft because it is defaulted to picker data display behavior.

             [label setTextAlignment:UITextAlignmentCenter];
             label.opaque=NO;
             label.backgroundColor=[UIColor clearColor];
             label.textColor = [UIColor blackColor];
             UIFont *font = [UIFont boldSystemFontOfSize:20];
             label.font = font;
             if(component == 0)
             {
                 [label setText:[NSString stringWithFormat:@"%@",[component1Array objectAtIndex:row]]];
             }
             else if(component == 1)
             {
                 [label setText:[NSString stringWithFormat:@"%@", [component2Array objectAtIndex:row]]];
             }
             return [label autorelease];
        }

上記のメソッドを使用している場合は、UIPickerViewデリゲートメソッドについて言及する必要があります...

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component

上記のサンプル コードの出力は次のようになります。

代替テキスト

于 2010-12-06T11:40:48.890 に答える
3

CGRectZero のせいで何も見えません。ケースにサイズを設定する必要があります。

UICatalog で、CustomView に CGRectZero をどのように使用したかについて話している場合... CustomView.m を見ると、実際には CGRectZero を無視し、フレームを initWithFrame のサイズに設定していることがわかります。

于 2009-03-11T03:37:11.623 に答える
3

iOS 6 では、テキスト配置属性を含むことができる NSAttributedString を返すことができるようになりました。ここに別の関連する質問に短いスニペットを投稿しました: https://stackoverflow.com/a/14035356/928963

于 2012-12-26T02:22:58.360 に答える
0

次のことを確認してください。

  • 必要な高さと幅の明示的なフレームを提供します。
  • ラベルの表示の不透明度 (.opaque = YES または NO を介して) と背景色を適切に設定します (通常、それぞれ NO と [UIColor clearColor] が必要です)。
  • フォントを明示的に設定します。
于 2009-02-22T11:05:15.807 に答える