2010-09-27 2 views
2

Это может быть простой вопрос, но как добавить несколько компонентов в UIPickerView? Я использую NSMutableArray для заполнения одного компонента, но я не знаю, как заполнить остальные. Мне также нужно изменить значение метки при выборе строки. Заранее спасибо КиранКак добавить несколько компонентов в PickerView?

ответ

10

я понимаю, что вы новичок. Вот как реализовать методы Них справедливо указали:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { 
    // return the number of components required 
    return 2; 
} 

Вы можете использовать другие NSMutableArray «S для заполнения компонентов. Если предположить, что у вас есть 2 компонента, каждый из которых использует разные NSMutableArray т.е. array1 и array2:

// Return row count for each of the components 
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { 
    if (component == 0) { 
     return [array1 count]; 
    } 
    else { 
     return [array2 count]; 
    } 
} 

// Populate the rows of the Picker 
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { 

    // Component 0 should load the array1 values, Component 1 will have the array2 values 
    if (component == 0) { 
     return [array1 objectAtIndex:row]; 
    } 
    else if (component == 1) { 
     return [array2 objectAtIndex:row]; 
    } 
    return nil; 
} 

Используйте этот код, чтобы изменить текст label, скажем selectedValue при выборе значения в PickerView:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 
    selectedValue.text = [NSString stringWithFormat: @"%@, %@", [array1 objectAtIndex:[myPicker selectedRowInComponent:0]],[array2 objectAtIndex:[myPicker selectedRowInComponent:1]]]; 
} 

... и вам хорошо идти :)

Возможно, вы также захотите увидеть http://joshhighland.com/blog/2009/09/17/uipickerview-spinning-multiple-components/ для получения ценных советов по программированию pickerView.

2

Вы должны установить источник данных и использовать

– numberOfComponentsInPickerView: 
– pickerView:numberOfRowsInComponent: 

установить его делегатом и использование:

– pickerView:didSelectRow:inComponent: 

изменить метку, когда определенная строка в определенном компоненте . Очень вероятно, UITableViewDelegate и Datasource

, а также принимая взгляд на documentation помогает :)

1

Вместо component Я нашел, используя более tag.

enter image description here

Затем в коде:

// returns the # of rows in each component.. 
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{ 
    //NSLog(@"Component_1: %d",pickerView.tag); 
    if (pickerView.tag == 1) 
     return [self.arrOpponentTeams count]; 
    else if (pickerView.tag == 2) 
     return [self.arrMyTeams count]; 
    else 
     return [self.arrPlayers count]; 
} 

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{ 
    //NSLog(@"Component_2: %d",pickerView.tag); 
    if(pickerView.tag == 1) 
     return [self.arrOpponentTeams objectAtIndex:row]; 
    else if (pickerView.tag == 2) 
     return [self.arrMyTeams objectAtIndex:row]; 
    else 
     return [self.arrPlayers objectAtIndex:row]; 
} 
1

Я не знаю, если это немного поздно, но я решил это еще один способ массив немного рудиментарные Но она творит чудеса Вы даже можете поставить разные цвет для каждого массива

- (void) viewDidLoad { 
    horPickerArray = @[@"00",@"01",@"02",@"03",@"04",@"05".to..24]; 
    minPickerArray = @[@"00",@"01",@"02",@"03",@"04",@"05".to..59]; 
    secPickerArray = @[@"00",@"01",@"02",@"03",@"04",@"05".to..59]; 
} 

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 
{ 
return 3; 
} 

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 
{ 
if (component == 0) { 
     return _HorPickerArray.count ; 
    } 
    else if (component == 1) { 
     return _MinPickerArray.count ; 
    } 
    else if (component == 2) { 
     return _SecPickerArray.count ; 
    } 
} 

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
if (component == 0) { 
     return [_HorPickerArray objectAtIndex:row]; 
    } 
    else if (component == 1) { 
     return [_MinPickerArray objectAtIndex:row]; 
    } 
    else if (component == 2) { 
     return [_SecPickerArray objectAtIndex:row]; 
    } 
    return nil; 

} 

И Печать в TextField

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ 

    _OficialTime.text =[NSString stringWithFormat: @"%@:%@:%@", [_HorPickerArray objectAtIndex:[_TimerPiker selectedRowInComponent:0]],[_MinPickerArray objectAtIndex:[_TimerPiker selectedRowInComponent:1]], [_SecPickerArray objectAtIndex:[_TimerPiker selectedRowInComponent:2]]]; 
} 
Смежные вопросы