UIPicker - 初始值问题

时间:2010-09-23 17:18:53

标签: iphone uipicker

我有一个包含3个包含数值的组件的UIPicker,这允许用户以hh:mm:ss格式设置时间。如果我从第一个组件中选择小时,我的UITextField看起来像这样:10 :( null):( null)。当用户选择适当的mm和ss时,可以删除(null)。但是如果用户只想输入10个小时,我希望其他值为00而不是(null),而用户不必物理移动选择器组件。

有人对此有任何想法吗?

下面的一些代码,这个问题与timePicker有关。

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    if([pickerView isEqual: routePicker])
    {
        route.text = [[routeArray objectAtIndex:0] valueForKey:@"route_name"];
        return [[routeArray objectAtIndex:row] valueForKey:@"route_name"];
    }
    else if([pickerView isEqual: activityPicker])
    {
        activity.text = [activityArray objectAtIndex:0];
        return [activityArray objectAtIndex:row];
    }
    else if([pickerView isEqual: intensityPicker])
    {
        if ([intensityArray objectAtIndex:row]==@"Low")
            numberIntensity=2;
        else if ([intensityArray objectAtIndex:row]==@"Low-Medium")
            numberIntensity=3.5;
        else if ([intensityArray objectAtIndex:row]==@"Medium")
            numberIntensity=5;
        else if ([intensityArray objectAtIndex:row]==@"Medium-High")
            numberIntensity=6.5;
        else if ([intensityArray objectAtIndex:row]==@"High")
            numberIntensity=8;
        else numberIntensity=0;

        intensity.text = [intensityArray objectAtIndex:0];
        return [intensityArray objectAtIndex:row];
    }
    else if([pickerView isEqual: timePicker])
    {
        switch (component)
        {
            case 0:
                return [hourArray objectAtIndex:row];
                break;
            case 1:
                return [minuteArray objectAtIndex:row];
                break;
            case 2:
                return [secondArray objectAtIndex:row];
                break;
            default:
                return 0;
                break;
        }
    }
    else if([pickerView isEqual: distancePicker])
    {
        switch (component)
        {
            case 0:
                return [distance1Array objectAtIndex:row];
                break;
            case 1:
                return [distance2Array objectAtIndex:row];
                break;
            default:
                return 0;
                break;
        }
    }   
    else 
    {
        return 0;
    }
}



-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    if([pickerView isEqual: routePicker])
    {
        route.text = [[routeArray objectAtIndex:row] valueForKey:@"route_name"];
    } 
    else if([pickerView isEqual: timePicker])
    {
        if (component == 0)
        {
            selectedHour = [hourArray objectAtIndex:row];
        } 
        else if (component == 1)
        {
            selectedMinute = [minuteArray objectAtIndex:row];
        } 
        else if (component == 2)
        {
            selectedSecond = [secondArray objectAtIndex:row];
        }
        time.text = [NSString stringWithFormat:@"%@:%@:%@", selectedHour, selectedMinute, selectedSecond];
    }
    else if([pickerView isEqual: distancePicker])
    {
        if (component == 0)
        {
            selectedDistance1 = [distance1Array objectAtIndex:row];
        } 
        else if (component == 1)
        {
            selectedDistance2 = [minuteArray objectAtIndex:row];
        } 
        distance.text = [NSString stringWithFormat:@"%@.%@", selectedDistance1, selectedDistance2];
    }
    else if([pickerView isEqual: activityPicker])
    {
        activity.text = [activityArray objectAtIndex:row];
    }
    else if([pickerView isEqual: intensityPicker])
    {
        intensity.text = [intensityArray objectAtIndex:row];
    }
}

1 个答案:

答案 0 :(得分:1)

我认为这一行:

time.text = [NSString stringWithFormat:@"%@:%@:%@", selectedHour, selectedMinute, selectedSecond];

可以更改为:

time.text = [NSString stringWithFormat:@"%@:%@:%@",
             (selectedHour ? selectedHour : @"00"),
             (selectedMinute ? selectedMinute : @"00"),
             (selectedSecond ? selectedSecond : @"00")];

这假定selectedHourselectedMinuteselectedSecond在此代码之外最初都是nil。我远离我的mac,所以我没有测试过。

或者,您可以将selectedHourselectedMinuteselectedSecond初始化为@"00"