UIPickerView с NSDictionary

Я - программист.NET и в новинку для Objective C.

Я пытаюсь сделать UIPickerView, который действует как.NET dropdownlist. Пользователь видит список текста и выбирает один и выбранное значение (который является идентификатором), используется в коде.

Я просматривал в течение почти половины дня, пытаясь понять это. Я мог добавить обычный PickerView со списком строк, представления средства выбора с mulitple компонентами и представления средства выбора с зависимыми компонентами, ни один из которого, кажется, не отвечает на мой запрос.

Помогите.

9
задан Dave 9 March 2010 в 00:59
поделиться

1 ответ

Вы можете использовать NSDictionary в качестве источника данных для UIPickerView, но если у вас есть собственный NSObject, который уже содержит пару ключ / значение, тогда было бы проще использовать NSArray этих объектов в качестве источника данных.

Предположим, что настраиваемый объект - это Planet со свойствами planetId (int) и planetName (NSString). Создайте массив NSArray, называемый планетами, с объектами в том порядке, в котором вы хотите, чтобы они отображались в средстве выбора (они не обязательно должны быть в порядке planetId).

В titleForRow вы должны сделать:

return ((Planet *)[planets objectAtIndex:row]).planetName;

В didSelectRow, чтобы получить выбранную планету:

Planet *selectedPlanet = (Planet *)[planets objectAtIndex:row];

//
//
Используя NSDictionary, вы пришлось бы сопоставить ключевые значения с номером строки средства выбора. Один из способов сделать это - просто задать значения ключей номерам строк и добавить настраиваемые объекты в качестве значений.

Таким образом, словарь будет создан следующим образом:

NSArray *keys = [NSArray arrayWithObjects:@"0", @"1", @"2", @"3", nil];
NSArray *values = [NSArray arrayWithObjects:mercury, venus, earth, mars, nil];
items = [[NSDictionary dictionaryWithObjects:values forKeys:keys] retain];

В titleForRow вы должны сделать:

NSString *itemKey = [NSString stringWithFormat:@"%d", row];
Planet *planet = (Planet *)[items objectForKey:itemKey];
return planet.planetName;

В didSelectRow вы должны сделать:

NSString *itemKey = [NSString stringWithFormat:@"%d", row];
Planet *selectedPlanet = (Planet *)[items objectForKey:itemKey];
13
ответ дан 4 December 2019 в 15:14
поделиться