如何更改UIPickerView的文本大小和组件宽度?

rks*_*rst 15 iphone cocoa-touch

我有以下代码来创建UIPickerView:

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

我想更改组件宽度并更改每个组件中的文本大小.是否有可能做到这一点?

谢谢!

Lou*_*arg 50

您可以通过适当的委托方法更改宽度

- (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;
}
Run Code Online (Sandbox Code Playgroud)

对于自定义文本大小,您可以使用委托返回您想要的任何大小的文本的自定义视图:

- (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;
}
Run Code Online (Sandbox Code Playgroud)

当然,您需要修改这些以便为您的应用程序提供适当的值,但它应该可以让您到达需要的位置.

  • 我还想将这一行添加到答案中,以防您使用数组来填充选择器(最有可能).而不是retval.text = @"Demo",替换为retval.text = [messageArray objectAtIndex:row]; (2认同)