IOS, как реализовать выпадающий список и как позаботиться о его закрытии?

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

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

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

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

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

Ответ 1

Выпадающие списки обычно реализуются в 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:

Ответ 2

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

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.

Ответ 3

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

Ответ 5

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

https://github.com/iVishal/VSDropdown