UITableViewController – выпадающий список таблиц, чтобы показать новый UIView

Я пытаюсь создать UITableViewController таким образом, что когда пользователь нажимает кнопку «Поиск» на панели навигации, представление таблицы падает и UIView падает с панели навигации. Затем, когда пользователь удаляет где-либо за пределами UIView, UIView должен убираться, и представление таблицы должно возвращаться в исходное положение.

В настоящее время у меня есть следующий метод, который является селектором кнопки «Поиск». Примечание. Self.searchBar – это пользовательский подкласс UIView.

Есть ли более чистый / лучший способ достичь этого? Также я не уверен, как избавиться от представления после того, как пользователь удалит меню поиска … Я предполагаю, что я должен позвонить, [self.searchBar removeFromSuperview]; но не уверен, в какой метод делегата поставить эту строку.

Благодаря!

- (void)_showSearchMenu { CGRect frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height * .25); frame.origin.y = CGRectGetMaxY(self.navigationController.navigationBar.frame) - frame.size.height; self.searchBar.frame = frame; [self.navigationController.navigationBar.superview insertSubview:self.searchBar belowSubview:self.navigationController.navigationBar]; [UIView animateWithDuration:0.5 animations:^{ CGRect frame = self.searchBar.frame; frame.origin.y = CGRectGetMaxY(self.navigationController.navigationBar.frame); self.searchBar.frame = frame; self.tableView.contentOffset = CGPointMake(0, -250); }]; } 

Чтобы быть более ясным, я пытаюсь достичь чего-то похожего на эффект, наблюдаемый здесь в приложении HotelTonight (второй экран показывает, что происходит, когда вы нажимаете кнопку верхнего правого бара)

введите описание изображения здесь

введите описание изображения здесь

    2 Solutions collect form web for “UITableViewController – выпадающий список таблиц, чтобы показать новый UIView”

    Это, я думаю, лучший подход для этого, используйте этих делегатов:

    (CGFloat) tableView: (UITableView *) tableView heightForHeaderInSection: (NSInteger) раздел (UIView *) tableView: (UITableView *) tableView viewForHeaderInSection: (NSInteger) раздел

    Как:

    1. Создайте BOOL isOpen со значением по умолчанию NO
    2. Когда вы нажимаете кнопку «Поиск», выполните следующее:

       (void) searchButtonTouch:(id)sender { isOpen = (isOpen) ? YES : NO; isOpen = !isOpen; [self.urTableView reloadData]; } 
    3. Теперь в ваших делегатах:

       (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return (isOpen) ? 170.0f : 0.0f; } (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { CGFloat height = [self tableView:tableView heightForHeaderInSection:section]; UIView *vw = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, height)]; vw.backgroundColor = [UIColor yellowColor]; // add other controls here in your UIView // or // just add a UIView at top of your UITableView // then add other controls to it (if ur using storyboard) return vw; } 
    • Добавить Tapgesture в режиме супервизора
    • В TapGesture Action проверьте, есть ли вид SearchBar видимый
    • Если Visible скрывает вид DropDown, устанавливая новый фрейм с нулевой высотой
    • Вы можете добавить Tap Gesture Programmatically или из Interface Builder, вы можете использовать его метод делегирования «shouldReceiveTouch» или любое другое настраиваемое действие. Выполнение жеста
    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.