2009-02-22 47 views
8

Làm cách nào để căn chỉnh văn bản trong một UIPickerView? Tôi đã cố gắng tùy chỉnh các chế độ xem UILabel s cho chế độ xem hàng, nhưng vì một số lý do, không có gì hiển thị, căn phải hoặc cách khác. Đây là những gì tôi đã viết:văn bản căn chỉnh phải trong UIPickerView

- (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]; 
} 

Trong trường hợp bất cứ ai đang tự hỏi, tôi sử dụng CGRectZero vì tôi thấy nó trong ví dụ UICatalog.

Trả lời

3

Bạn không thấy bất kỳ điều gì vì CGRectZero. Bạn cần đặt kích thước trong trường hợp của bạn.

Trong UICatalog, nếu bạn nói về cách họ sử dụng CGRectZero cho CustomView ... thì nếu bạn nhìn vào CustomView.m, bạn sẽ thấy chúng thực sự bỏ qua CGRectZero và đặt khung thành kích thước trong initWithFrame:

0

Hãy chắc chắn rằng bạn:

  • Cung cấp một khung rõ ràng đó là cao và rộng khi cần thiết;
  • Đặt độ mờ hiển thị của nhãn (thông qua .opaque = YES hoặc NO) và màu nền phù hợp (bạn thường muốn KHÔNG và [Clear color Ucolorolor] tương ứng).
  • Đặt phông chữ một cách rõ ràng.
8

Tôi đã lấy hai thành phần trong bộ chọn và hai mảng để đặt tiêu đề của các hàng trong một thành phần cụ thể.

Mã dưới đây sẽ hiển thị trình chọn trung tâm với phông chữ và phông chữ mặc định của bộ chọn. Nó sẽ cung cấp cho hành vi hiển thị chính xác pickerdata với căn giữa của bộ chọn.

Ở đây,

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]; 
     } 

Bạn nên bình luận dưới đây đề cập đến phương pháp UIPickerView đại biểu nếu bạn đang sử dụng phương pháp nêu trên ...

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

Sản lượng mẫu mã trên sẽ trông giống như dưới đây

alt text

3

Trong iOS 6, bây giờ bạn có thể trả về một NSAttributedString, có thể chứa các thuộc tính căn chỉnh văn bản. Tôi đã đăng một đoạn trích ngắn về một câu hỏi có liên quan khác tại đây: https://stackoverflow.com/a/14035356/928963

Các vấn đề liên quan