【问题标题】:Change UIPickerView font size for different column更改不同列的 UIPickerView 字体大小
【发布时间】:2015-04-03 17:49:40
【问题描述】:

我正在构建一个 UIPickerView,它适用于我的以下代码。

//Title for Row
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{

    if (component==kNumComponent)
        return Number[row];
        else if(component==kSeaComponent)
            return Season[row];
        else
            return Course[row];

}

其中 Number、Season 和 Course 是存储字符串的 NSArray。在这里,我当然想将字体大小更改为更小的字体。我在这里学到了一些例子。

- (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.font = [UIFont systemFontOfSize:22];
            retval.text = [pickerViewArray objectAtIndex:row];
       return retval;
    }

请问有什么快速的方法可以将上述代码合并到我的可用代码中以更改字体大小吗?说,我想需要在某个地方传递“Retval”?

更新:感谢 Scotts 的提示(见下文),我的方法有效,张贴在这里:

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row
          forComponent:(NSInteger)component reusingView:(UIView *)view {

    UILabel *retval = (UILabel*)view;
    if (!retval) {
        retval = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, [pickerView rowSizeForComponent:component].width, [pickerView rowSizeForComponent:component].height)];
    }

    retval.font = [UIFont systemFontOfSize:22];

    if (component==kNumComponent)
        retval.text = Number[row];
    else if(component==kSeaComponent)
    {retval.font = [UIFont systemFontOfSize:14];
        retval.text = Season[row];}
    else
    { retval.font = [UIFont systemFontOfSize:14];
        retval.text = Course[row];}

    return retval;
}

【问题讨论】:

    标签: ios iphone uipickerview


    【解决方案1】:

    要自定义选择器的视图,您必须使用pickerView:viewForRow:。为此,请完全删除pickerView:titleForRow:,并在pickerView:viewForRow: 中,使用您最初在pickerView:titleForRow: 中使用的条件设置retval 的文本。

    - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row
     forComponent:(NSInteger)component reusingView:(UIView *)view {
    
            UILabel *retval = (UILabel*)view;
            if (!retval) {
                retval = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, [pickerView rowSizeForComponent:component].width, [pickerView rowSizeForComponent:component].height)];
            }
    
            retval.font = [UIFont systemFontOfSize:22];
    
            if (component==kNumComponent)
                retval.text = Number[row];
            else if(component==kSeaComponent)
                retval.text = Season[row];
            else
                retval.text = Course[row];
    
            return retval;
    }
    

    或者不用创建标签子视图,可以直接使用UIPickerViewDelegatepickerView:attributedTitleForRow:forComponent:方法编辑标题的字体,例如:

    - (NSAttributedString *)pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row forComponent:(NSInteger)component
    {
        NSString *title;
        if (component==kNumComponent)
            title = Number[row];
        else if(component==kSeaComponent)
            title = Season[row];
        else
            title = Course[row];
    
        UIFont *font = [UIFont systemFontOfSize:22];
        NSDictionary *attributes = @{NSFontAttributeName:font};
    
        return [[NSAttributedString alloc] initWithString:title attributes:attributes];
    }
    

    【讨论】:

    • 感谢您的回复。但是它显示一个空的pickerview,请问有什么需要改变的吗?
    • @user4441082 尝试删除“自动释放”。
    • 再次感谢。第二种方法方法效果很好。还有一个问题,如果我想为不同的组件设置不同的字体大小,请问如何解决?
    • @user4441082 删除“autorelease”后第一种方法是否有效?
    • 不,我在第一次尝试时已经将其删除,否则将无法通过编译。即便如此,pickerview 仍然是空的。
    猜你喜欢
    • 2015-12-09
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 2017-10-28
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    相关资源
    最近更新 更多