2016-12-04 5 views
2

Ich möchte nach oben scrollen, wenn ich auf eine beliebige BarButtonItem doppeltippe. Ich sah viele Antworten auf StackOverflow, aber keiner von ihnen funktionierte für mich. Vielleicht verwende ich es falsch? Wo stelle ich den Code in die AppDelegate oder die TableViewControllers Ich möchte diese Funktionalität speziell hinzufügen?Doppel-Tap-Bar-Taste zum Scrollen nach oben

Wie auch immer, ich benutze Swift 2.3 und Xcode 8 und würde gerne etwas Hilfe bekommen.

Vielen Dank.

Antwort

0

Wissen Sie über scrollsToTop? Ich denke es ist was du brauchst. Beschreibung von iOS SDK in Bezug auf scrollsToTop Eigenschaft in UIScrollView:

Wenn der Benutzer die Statusleiste Armaturen, die Scroll-Ansicht unter der Berührung, die am nächsten an die Statusleiste ist, wird gescrollt wird nach oben, aber nur, wenn seine scrollsToTop Eigenschaft ist JA, sein Delegierter gibt NO nicht aus shouldScrollViewScrollToTop zurück, und es ist nicht bereits an der Spitze. // Auf dem iPhone führen wir diese Geste nur aus, wenn eine Bildschirmansicht mit scrollsToTop == YES angezeigt wird. Wenn mehr als einer gefunden wird, wird keiner gescrollt.

+0

Ja, ich kenne diese Zeile ich sah es in vielen Antworten, aber ich habe immer Fehler darauf auch zeigen. Kannst du mir vielleicht zeigen, wie man es richtig schreibt, damit es funktioniert? –

+0

'scrollsToTop' ist standardmäßig true, aber wenn Sie viele' UIScrollView' oder Unterklassen haben, müssen Sie 'false' für alle außer der benötigten Ansicht setzen. –

+0

Die einzige'UIScrollView' die ich habe ist: 'override func scrollViewWillBeginDragging (scroll: UIScrollView) { self.searchController.searchBar.resignFirstResponder() self.searchController.searchBar.endEditing (true) } ', so kann ich bewegen, um die Tastatur zu entlassen, wenn ich suche ... –

0

Beim ersten Setup UITabBarControllerDelegate Delegate. Der Delegierte kann einfach vom Storyboard oder über einen Code mit der delegate-Eigenschaft von UITabBarController festgelegt werden.

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

Sie können sogar UITabBarController Unterklasse und implementieren UITabBarControllerDelegate für sie, damit es Delegierten für sich selbst werden kann.

mySubclassedTabBar.delegate = mySubclassedTabBar 

Wenn Sie Delegat haben, können Sie diese Methode ausprobieren.

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

Ich lege den gesamten Code in den TableViewController/ViewController, ich möchte diese Funktionalität speziell hinzufügen? oder in einer neuen swift-Datei, die ich mit meinem TabBarViewController verbinden werde? –

+0

Einfachster Weg wäre, UITabBarController (so in der Regel neue Swift-Datei) Unterklasse, implementieren Delegate-Protokoll und im Storyboard ändern tabBarController die Klasse. Dann können Sie die Delegate-Eigenschaft im Storyboard oder über Code (d. H. Während der Initialisierung) leicht ändern. – Adamsor

Verwandte Themen