簡體   English   中英

更改不同列的UIPickerView字體大小

[英]Change UIPickerView font size for different column

我正在構建一個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”嗎?

更新:感謝斯科茨的提示(見下文),我的方法有效,發布在這里:

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

要自定義選擇器的視圖,必須使用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];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM