2016-02-04 1 views
0

У меня есть 5 tableViewControllers с использованием протокола UISearchResultsUpdating с новым UISearchControllerНаличие нескольких tableViews в Scrollview с пейджинговой делает SearchBar tableHeaderView в не осязаемый

private var resultSearchController:UISearchController! 
    resultSearchController = UISearchController(searchResultsController: nil) 
    resultSearchController.searchResultsUpdater = self 
    resultSearchController.dimsBackgroundDuringPresentation = false 
    resultSearchController.searchBar.sizeToFit() 
    tableView.tableHeaderView = resultSearchController.searchBar 
    tableView.tableHeaderView?.backgroundColor = UIColor.redColor() 
    tableView.tableHeaderView?.userInteractionEnabled = true 

Когда я загружаю эту ViewController, нажав на нее поверх других viewControllers, все работает хорошо. Я могу прикоснуться к ячейкам, я могу прикоснуться к поисковому бару и управлять поиском.

Теперь, когда я ставлю 5 (или меньше, это не имеет значения) этих tableViewControllers внутри контроллера, содержащего Scrollview

let rect: CGRect = self.view.frame 
scrollView = UIScrollView(frame: rect) 
scrollView.pagingEnabled = true 

scrollView.addSubview(oneTableViewController) 
scrollView.addSubview(twoTableViewController)... 
  • я могу перемещаться по 5 tableViewController, проводя слева и справа ,
  • Я могу выбрать строку в любом виде таблицы.
  • , но я не могу коснуться SearchBar уже ...

Я попытался установить:

  • scrollView.exclusiveTouch = ложный
  • убедитесь, что tableView.tableHeaderView .userInteractionEnabled = верно?

Любые идеи?

+0

примечание: когда я касаюсь searchBar, вызывается searchBarShouldBeginEditing: и я возвращаю true (я тоже пытался использовать false) ... но ничего не происходит. клавиатура даже не появляется – Mikael

ответ

0

Если вы попытаетесь сделать такую ​​вещь, не забудьте добавить tableViewControllers в childViewControllers вашего основного ViewController.

self.addChildViewController(tableVC1) 
tableVC1.didMoveToParentViewController(self) 
self.addChildViewController(tableVC2) 
tableVC2.didMoveToParentViewController(self) 

сейчас все работает нормально!

0

Рассмотрев вашу проблему, я думаю, что может быть лучший способ добиться того, что вы делаете.

Вместо того, чтобы использовать 5 табличных представлений в прокрутке, я скажу, что использую одно табличное представление, и вы можете установить его ячейку для отображения данных. Теперь вы можете добавить scrollview в другую ячейку и добавить свои данные в scrollview, что позволит вам прокручивать Лево и право.

В противном случае, если вы хотите продолжать тот же подход, что вы делаете то,

  1. вы можете вращать TableView до 90 градусов, так что это дает вам ощущение левой и правой прокрутки.

  2. Вы можете использовать свой tableview'd делегат:

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    
    //do the check 
    if tableView == YourTableView { 
        //do your stuff. As you have indexPath you can get row at that indexPath 
         } 
    } 
    
+0

Альтернативным решением является использование UIPageViewController, но здесь возникает вопрос, почему searchBar не работает. Трудно отлаживать. – Mikael

+0

PageViewController не даст вам большого контроля над более длительным запуском. Я лично чувствую их как немые контролы: P. Если ваш searchBar не трогателен, просто проверьте, перекрывается ли на нем какой-либо другой элемент управления. Как вы сказали, searchBar был осязаемым, но его не трогательно после поиска. Попробуйте «иерархию просмотра отладки» во время запуска приложения –