2016-12-04 9 views
2

Я хочу прокрутить вверх, когда я дважды нажимаю на любой BarButtonItem. Я видел много ответов на stackOverflow, но ни один из них не работал для меня. Может быть, я использую это неправильно? Где я помещаю код в AppDelegate или TableViewControllers Я хочу добавить эту функциональность специально?Кнопка двойного нажатия на панель для прокрутки вверх

В любом случае, я использую Swift 2.3 и Xcode 8 и хотел бы получить помощь.

спасибо.

ответ

0

Вы знаете насчет scrollsToTop? Я думаю, что это то, что вам нужно. Описание от IOS SDK, связанное с scrollsToTop собственности в UIScrollView:

Когда пользователь вводит строку состояния, вид прокрутки под прикосновением, который находится ближе всего к строке состояния будет прокручиваться вверх, но только если его свойство scrollsToTop ДА, его делегат не возвращает НЕТ от shouldScrollViewScrollToTop, и он еще не на вершине. // На iPhone мы выполняем этот жест только в том случае, если есть один экранный вид прокрутки с scrollsToTop == ДА. Если найдено более одного, ни один из них не будет прокручиваться.

+0

Да, я знаю эту строку, я видел ее во многих ответах, но у меня всегда были ошибки, указывающие на нее. Может быть, вы можете показать мне, как правильно ее написать, чтобы заставить ее работать? –

+0

'scrollsToTop' истинно по умолчанию, но если у вас много' UIScrollView' или его подклассов, вам нужно установить 'false' для всех, кроме нужного вида –

+0

Единственный 1' UIScrollView' у меня есть: 'override func scrollViewWillBeginDragging (Scrollview: UIScrollView) { self.searchController.searchBar.resignFirstResponder() self.searchController.searchBar.endEditing (истина) } ', так что я могу ударить, чтобы закрыть клавиатуру, когда я искать ... –

0

Сначала настройка UITabBarControllerDelegate делегата. Делегировать можно легко установить из раскадровки или с помощью кода с помощью свойства делегата UITabBarController.

myTabBar.delegate = myNewDelegate // Have to conform to UITabBarControllerDelegate protocol 

Вы можете даже подкласс UITabBarController и реализовать UITabBarControllerDelegate для него, чтобы он мог стать делегатом для себя.

mySubclassedTabBar.delegate = mySubclassedTabBar 

Когда у вас есть делегат, вы можете попробовать этот метод.

func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool 
{ 
    guard let tabBarControllers = tabBarController.viewControllers 
    else 
    { 
     // TabBar have no configured controllers 
     return true 
    } 

    if let newIndex = tabBarControllers.indexOf(viewController) where newIndex == tabBarController.selectedIndex 
    { 
     // Index won't change so we can scroll 

     guard let tableViewController = viewController as? UITableViewController // Or any other condition 
     else 
     { 
      // We are not in UITableViewController 
      return true 
     } 

     tableViewController.tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0), atScrollPosition: .Top, animated: true) 
    } 

    return true 
} 
+0

Я поместил весь код в TableViewController/ViewController. Я хочу добавить эту функциональность специально? или в новом быстром файле я подключусь к моему tabBarViewController? –

+0

Самый простой способ - это подкласс UITabBarController (как обычно, новый swift-файл), реализовать делегатский протокол и изменить класс tabBarController в раскадровке. Затем вы можете легко изменить свойство делегирования в раскадровке или через код (т. Е. Во время инициализации). – Adamsor