2008-11-02 24 views
15

Tôi có đoạn code sau để tạo một UIPickerView:Làm cách nào để thay đổi kích thước văn bản và chiều rộng thành phần của UIPickerView?

pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0f, 416.0f - height, 320.0f, height)]; 
pickerView.delegate = self; 
pickerView.showsSelectionIndicator = YES; 
[pickerView setSoundsEnabled:YES]; 

Tôi muốn thay đổi độ rộng thành phần và thay đổi kích thước văn bản trong mỗi thành phần. có khả năng làm cái này không?

Cảm ơn!

Trả lời

50

Bạn có thể thay đổi chiều rộng bằng một phương pháp đại biểu thích hợp

- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component { 
    switch(component) { 
     case 0: return 22; 
     case 1: return 44; 
     case 2: return 88; 
     default: return 22; 
    } 

    //NOT REACHED 
    return 22; 
} 

Đối với một kích thước văn bản tùy chỉnh, bạn có thể sử dụng các đại biểu trở lại quan điểm tùy chỉnh với bất cứ văn bản có kích thước bạn muốn:

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view { 
     UILabel *retval = (id)view; 
     if (!retval) { 
      retval= [[[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, [pickerView rowSizeForComponent:component].width, [pickerView rowSizeForComponent:component].height)] autorelease]; 
     } 

     retval.text = @"Demo"; 
     retval.font = [UIFont systemFontOfSize:22]; 
     return retval; 
} 

Tất nhiên, bạn sẽ cần phải sửa đổi chúng để có giá trị thích hợp cho ứng dụng của bạn, nhưng nó sẽ giúp bạn có được nơi bạn cần phải đi.

+0

Một vài lỗi trong khối mã thứ hai của bạn: \t - UIView cần được truyền tới (UILabel *). \t - Dòng gán lại đang thiếu dấu ngoặc mở và cần gọi initWithFrame nếu không chúng tôi sẽ không hiển thị gì: tức là. \t retval = [[[UILabel alloc] initWithFrame: CGRectMake (0.0f, 0.0f, [pickerView rowSizeForComponent: component] .width, [pickerView rowSizeForComponent: component] .height)] autorelease]; –

+0

Cảm ơn, tôi sẽ thực hiện các thay đổi thích hợp, mặc dù không chính xác những gì bạn đề xuất. Tôi sẽ đúc thông qua một id, về cơ bản bởi vì nó là ngắn hơn và bạn không đưa ra bất cứ điều gì bởi vì các lval của biểu thức đã được gõ vào một UIView. –

+2

Tôi cũng muốn thêm dòng này vào câu trả lời trong trường hợp bạn đang làm việc với một mảng để điền vào bộ chọn (rất có thể). Thay vì retval.text = @ "Demo", thay thế bằng retval.text = [messageArray objectAtIndex: row]; – Jazzmine

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