Я - программист.NET и в новинку для Objective C.
Я пытаюсь сделать UIPickerView, который действует как.NET dropdownlist. Пользователь видит список текста и выбирает один и выбранное значение (который является идентификатором), используется в коде.
Я просматривал в течение почти половины дня, пытаясь понять это. Я мог добавить обычный PickerView со списком строк, представления средства выбора с mulitple компонентами и представления средства выбора с зависимыми компонентами, ни один из которого, кажется, не отвечает на мой запрос.
Помогите.
Вы можете использовать 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];