2015-11-22 4 views
0

Я использую SearchBar и когда я выбираю для поиска, это workes просто отлично (кроме этого предупреждения во время выполнения, что я не могу исправить Attempting to load the view of a view controller while it is deallocating... UISearchController)Swift: SearchBar остается видимым на parentViewController

Но если SearchBar IsActive и жмем «Назад» из NavBar, представлен родительский элемент, но также видно окно поиска с предыдущего экрана. Я попробовал отклонить searchBar, если нажата кнопка «Назад», но она все еще видна в течение некоторого времени. Я имею в виду

self.navigationItem.backButtonItem.enabled = false 

пока SearchBar активен, но мне не нравится это решение

мой код (я также Func updateSearchResultsForSearchController):

class ViewController: UIViewController ,UISearchResultsUpdating { 
var resultSearchController = UISearchController() 

override func viewDidLoad() { 
     super.viewDidLoad() 

     if #available(iOS 9.0, *) { 
      self.resultSearchController.loadViewIfNeeded()// iOS 9 
     } else { 
      // Fallback on earlier versions 
      let _ = self.resultSearchController.view// iOS 8 
     } 
     self.resultSearchController = ({ 
      let controller = UISearchController(searchResultsController: nil) 
      controller.searchResultsUpdater = self 
      controller.dimsBackgroundDuringPresentation = false 
      controller.searchBar.sizeToFit() 
      controller.hidesNavigationBarDuringPresentation = false 
      self.tableView.tableHeaderView = controller.searchBar 
      return controller 
     })() 

предупреждение Среда (не если это проблема)

Attempting to load the view of a view controller while it is deallocating is not allowed and may result in undefined behavior (<UISearchController: 0x7ff88130fdb0>) 

ответ

0

Чтобы удалить предупреждение, измените следующий c ода:

var resultSearchController = UISearchController() 

к:

var resultSearchController : UISearchController! 

И viewWillDisappear метод отпустить resultSearchController.

+0

Первый вызывает много ошибок в коде, он не работает. И я упомянул, что я попробовал отклонить searchBar, но у него есть задержка, поэтому он все еще отображается за 1-2 секунды до этого. – PoolHallJunkie

+1

@PoolHallJunkie, попробуйте отклонить его без анимации или, так как ваш отклоняющий контроллер просмотра удаляет его из супервизора 'removeFromSuperView()'. –

+0

thx, теперь его быстрее. Предупреждение все еще существует, UISearchController! не работает, только UISearchController!(), но получает фатальную ошибку – PoolHallJunkie

0

Благодаря UISearchController - Warning Attempting to load the view of a view controller

Try следующие:

class ViewController: UIViewController ,UISearchResultsUpdating { 
var resultSearchController : UISearchController! 

override func viewDidLoad() { 
     super.viewDidLoad() 


     self.resultSearchController = ({ 
      let controller = UISearchController() 
      controller.searchResultsUpdater = self 
      controller.dimsBackgroundDuringPresentation = false 
      controller.searchBar.sizeToFit() 
      controller.hidesNavigationBarDuringPresentation = false 
      self.tableView.tableHeaderView = controller.searchBar 
      return controller 
     })() 
    } 
    deinit { 
      self.searchController.loadViewIfNeeded() // iOS 9 
      let _ = self.searchController.view   // iOS 8 
    } 
Смежные вопросы