2015-12-22 3 views
0

У меня есть UISearchBar и UITableView на контроллере представления в моей раскадровке. Строка поиска находится над табличным представлением, чтобы она не прокручивалась. Моя проблема заключается в том, что инициализация UISearchController создает свой собственный экземпляр SearchBar, который не совпадает с тем, который я вручную добавил и разместил на своем раскадровке.Место UISearchBar выше tableview, но не в tableview или navbar

Как настроить мой раскадровки SearchBar, который был создан для меня моим UISearchController?

class ITSearchController: UIViewController, UITableViewDataSource, UITableViewDelegate, UISearchResultsUpdating { 

    @IBOutlet weak var tableView: UITableView! 
    @IBOutlet weak var searchBar: UISearchBar! 

    // So that the search results are displayed in the current controllers table view 
    let searchController = UISearchController(searchResultsController: nil) 

    override func viewDidLoad() { 

     searchController.searchResultsUpdater = self 
     searchController.dimsBackgroundDuringPresentation = false 
     definesPresentationContext = true 

     // This didn't work 
     //var view = self.view.viewWithTag(777) 
     //view = searchController.searchBar 

     // This works but isn't what I want 
     //tableView.tableHeaderView = searchController.searchBar 

     // This works but places it in the nav section. Not what I want. 
     // self.navigationItem.titleView = searchController.searchBar 

     // This is what I want but doesn't work. Basically make the search bar on my storyboard equal to the one created. 
     searchBar = searchController.searchBar 

    } 
} 

ответ

2

Вы не можете использовать панель поиска вы разместили на раскадровке с UISearchController поскольку UISearchController предоставляет свою собственную раскадровку.

В качестве альтернативы, замените панель поиска в раскадровке с UIView, а затем добавить строку поиска, представленную UISearchController как подвид к этому UIView.

class ITSearchController: UIViewController, UITableViewDataSource, UITableViewDelegate, UISearchResultsUpdating { 

@IBOutlet weak var tableView: UITableView! 
@IBOutlet weak var searchView: UIView! // make this UIView 

// So that the search results are displayed in the current controllers table view 
let searchController = UISearchController(searchResultsController: nil) 

override func viewDidLoad() { 

    searchController.searchResultsUpdater = self 
    searchController.dimsBackgroundDuringPresentation = false 
    definesPresentationContext = true 

    // This should work 
    searchView.addSubview(searchController.searchBar) 

} 
} 

Это даст вам такое же поведение.

+0

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

Смежные вопросы