UISearchDisplayDelegate, как удалить это непрозрачное представление? - PullRequest
0 голосов
/ 29 марта 2011

как я могу программно показать / скрыть этот непрозрачный вид из UISearchDisplayController ?

enter image description here

Возможно в searchDisplayControllerWillBeginSearch или searchDisplayControllerDidBeginSearch мне нужно установитьчто-то ... но что?

спасибо.

Ответы [ 4 ]

9 голосов
/ 29 марта 2011

Временное решение с использованием UIKeyboardWillAppearNotification.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow) name:UIKeyboardWillShowNotification object:nil];

OpaqueView - это UIControl с альфа = 0,8.

- (void) keyboardWillShow {
  for( UIView *subview in self.view.subviews ) {
   if( [subview isKindOfClass:[UIControl class]] ) {
      UIControl *v = (UIControl*)subview;
      if (v.alpha < 1) {
        v.hidden = YES;
      }
    }
  }
}

Я использовал этот ORRIBLE способ временного исправления проблемы .... любая другая идея будет оценена !

спасибо.

2 голосов
/ 21 ноября 2014

Другие ответы, где у меня не работает.Этот работает для меня на iOS7 и iOS8.

for( UIView *subview in self.view.subviews ) {
    if([subview  isMemberOfClass:[UIControl class]] ||
       ([[[subview  class] description] isEqualToString:@"UISearchDisplayControllerContainerView"])) {
        for(UIView *subView2 in subview.subviews)
        {
            for(UIView *subView3 in subView2.subviews)
            {
                if (subView3.alpha < 1) {
                    subView3.hidden = YES;
                }
            }
        }
    }
}

Если вам не нужна поддержка iOS7, пожалуйста, больше не используйте searchDisplayController, поскольку он устарел.Для iOS8 используйте UISearchController и свойство dimsBackgroundDuringPresentation

Ref: https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UISearchController/index.html#//apple_ref/occ/instp/UISearchController/dimsBackgroundDuringPresentation

2 голосов
/ 28 ноября 2013

Код, указанный elpsk, является текущим, но не будет работать в iOS7 и выше
Код работает в iOS6 и iOS7, как показано ниже
- добавить ниже уведомление в viewDidLoad

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow) name:UIKeyboardWillShowNotification object:nil];


Напишите ниже функцию

- (void) keyboardWillShow {
      for( UIView *subview in self.view.subviews ) {
       if([subview  isMemberOfClass:[UIControl class]] ||
         ([[[subview  class] description] isEqualToString:@"UISearchDisplayControllerContainerView"])) {
          UIControl *v = (UIControl*)subview;
          if (v.alpha < 1) {
            v.hidden = YES;
          }
        }
      }
    }

ПРИМЕЧАНИЕ: У кода есть только одно дополнительное условие, поскольку в iOS7 класс UIControl становится UISearchDisplayControllerContainerView,

0 голосов
/ 29 марта 2011

Мммм ... быстрый ответ.Не красиво, но наверняка работает

    #pragma mark UISearchBarDelegate

// Displays a view to simulate the lose of focus
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar {

  searchBar.showsCancelButton = NO;
  searchBar.autocorrectionType = UITextAutocorrectionTypeNo;

  UIButton *view1 = [[UIButton alloc] init];
  view1.frame = CGRectMake(0, 0, 320, MAX(480, self.tableView.contentSize.height));
  view1.alpha = 0.6;
  view1.tag = 2000;
  view1.backgroundColor = [UIColor blackColor];
  [view1  addTarget:self
             action:@selector(removeView)
   forControlEvents:UIControlEventTouchUpInside];
  [self.tableView setScrollEnabled:NO];

  [self.tableView addSubview:view1];
  [view1 release];
}

/**
 *  Pop the view and the keyboard
 */
- (void)removeView {
  UIView *v = [self.tableView viewWithTag:2000];
  v.hidden = YES;
  [v removeFromSuperview];
  [self.tableView setScrollEnabled:YES];
  [self.searchBar resignFirstResponder];
}

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

...