iOS, как реализовать выпадающий список и как позаботиться о его закрытии? - PullRequest
10 голосов
/ 12 марта 2012

Мне нужны некоторые сведения о том, как реализовать функциональность раскрывающегося списка в iOS.

Я имею в виду некоторые решения, такие как использование UITableView для отображения списка текстовых элементов.(в моем случае список может быть как статическим, так и динамическим, поэтому UITableView кажется хорошим вариантом для моего случая).Но одна вещь, которую я не могу понять, - это как отклонить выпадающий список ...

Предположим, есть раскрывающийся список где-то в представлении (допустим, это представление занимает весь экран).Раскрывающийся раскрывающийся список должен закрываться (закрываться), когда я нажимаю где-то еще в представлении, как в обычном раскрывающемся списке в среде рабочего стола.Как мне это сделать?

Один из способов - прослушать touchesBegan события в представлении и посмотреть, является ли раскрывающийся список открытым - это нормально, но проблема в том, есть ли у меня такие вещи, как кнопка и когда пользователь нажимает наодин из них, то я не получаю touchesBegan входные данные в представлении.

Как мне решить эту проблему в общем виде?

Ответы [ 5 ]

19 голосов
/ 12 марта 2012

Выпадающие списки обычно реализуются в iOS с использованием UIPickerView.Представление выбора можно установить как представление ввода текстового поля, которое будет содержать раскрывающийся список, а затем анимировать его на экране включения и выключения так же, как на клавиатуре.

Обычно вам также нужен UIToolbar с кнопкой «Готово» в качестве вспомогательного вида ввода, он отображается над палитрой и позволяет вам отменить выбор, если вы не сделали этого автоматически.

Вы удаляете средство выбора, отправляя resignFirstResponder в текстовое поле, либо из метода делегата представления средства выбора, либо из метода действия вашей кнопки «Готово».

Вы создаете панель инструментов как вспомогательное представление следующим образом:

accessoryView = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
accessoryView.barStyle = UIBarStyleBlackTranslucent;

UIBarButtonItem *space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];

UIBarButtonItem *done = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneTapped:)];

accessoryView.items = [NSArray arrayWithObjects:space,done, nil];

textField.inputAccessoryView = accessoryView;

Это даст вам одну кнопку "Готово" справа, которая связана с методом действия, называемым doneTapped:

3 голосов
/ 12 марта 2012

Попробуйте это. Это может помочь.

1) Add the UITableView on a transparent UIView. 
2) The UIView should have the same size as the display screen.
3) The UITableView shall take the same small size you have.
4) Implement the touches method as you mentioned for the holding UIView.
2 голосов
/ 28 июля 2014

Я создал раскрывающийся элемент управления для iOS. Вы можете проверить это ниже URL

https://github.com/iVishal/VSDropdown

2 голосов
/ 15 июля 2013

Я нашел этот проект доступным на github полезным. https://github.com/kmdarshan/dropdown

2 голосов
/ 12 марта 2012

Прежде всего, если вы находитесь на iPad, UIPopoverViewController предназначен именно для этого. Если вам нужно что-то более индивидуальное, у меня всегда есть невидимая полноразмерная кнопка, которая отображается под раскрывающимся списком. Он покрывает весь экран и при касании или когда выпадающий список отклоняет его, скрывает себя. Супер просто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...