Данные UIPickerView - PullRequest
       1

Данные UIPickerView

1 голос
/ 10 декабря 2010

У меня есть uipickerview, который используется для отображения имен в поле uitext, любые идеи о том, как передать значение, скрытое от пользователя, в переменную. Могу ли я как-то связать значение с именем в NSArray, не отображая его. Спасибо

Пробую словарь, но застрял на чем-то, что, вероятно, довольно просто, у меня есть словарь

    NSArray *keys = [NSArray arrayWithObjects:@"1", @"2", nil];
NSArray *objects = [NSArray arrayWithObjects:@"3", @"4", nil];
NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys];

и в didSelectRow у меня есть

    NSString *itemKey = [NSString stringWithFormat:@"%f", row];
    survonemd.text = [dictionary objectForKey:itemKey];

что кажется нормальным

но я застрял на titleForRow

любая помощь или советы будут высоко оценены.

Теперь у меня есть -

@property (nonatomic, retain) NSArray *keys;
@property (nonatomic, retain) NSArray *objects;


@synthesize keys;
@synthesize objects;


self.keys = [NSArray arrayWithObjects:@"1", @"2", @"3", nil];
self.objects = [NSArray arrayWithObjects:@"4", @"5", @"6", nil];
NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys];

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
NSString *itemKey = [keys objectAtIndex:row];
return [dictionary objectForKey:itemKey]; 
}

- (void) pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
NSString *itemKey = [keys objectAtIndex:row];
survonemd.text = [dictionary objectForKey:itemKey]; 
}

Запускается, и окно выбора вызывается из текстового поля, но данные не отображаются в окне выбора. Пожалуйста, помогите.

1 Ответ

1 голос
/ 14 декабря 2010

Вместо генерации ключевой строки из номера строки (для которой вы бы использовали %i вместо %f, кстати), используйте строку в качестве индекса в массиве ключей:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    NSString *itemKey = [keys objectAtIndex:row];
    survonemd.text = [dictionary objectForKey:itemKey]; 
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    NSString *itemKey = [keys objectAtIndex:row];
    return [dictionary objectForKey:itemKey];   
}

Таким образом, значения ключей также не обязательно должны быть числами в виде строк.

Определите ключи и объекты словаря как свойства и установите их, используя self.keys = ..., чтобы вы могли обращаться к ним должным образом.

...