2017-06-29 3 views
0

Ich habe hier einen benutzerdefinierten Befehl, um scrollToTop, wenn ein TabBar Element zweimal gedrückt wird. aber jetzt möchte ich eine Funktion zu einem bestimmten tabBaritem hinzufügen (Tag 3 können sagen, ....)Tippen Sie auf tabBarItem, um einen View Controller zu präsentieren

Wie kombiniere ich, was ich habe jetzt:

import UIKit 

class TabBarController: UITabBarController,UITabBarControllerDelegate { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     delegate = self 
     // Do any additional setup after loading the view. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
    func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool { 
     guard let viewControllers = viewControllers else { return false } 
     if viewController == viewControllers[selectedIndex] { 
      if let nav = viewController as? UINavigationController { 
       guard let topController = nav.viewControllers.last else { return true } 
       if !topController.isScrolledToTop { 
        topController.scrollToTop() 
        return false 
       } else { 
        nav.popViewController(animated: true) 
       } 
       return true 
      } 
     } 

     return true 
    } 
} 
extension UIViewController { 
    func scrollToTop() { 
     func scrollToTop(view: UIView?) { 
      guard let view = view else { return } 

      switch view { 
      case let scrollView as UIScrollView: 
       if scrollView.scrollsToTop == true { 
        scrollView.setContentOffset(CGPoint(x: 0.0, y: -scrollView.contentInset.top), animated: true) 
        return 
       } 
      default: 
       break 
      } 

      for subView in view.subviews { 
       scrollToTop(view: subView) 
      } 
     } 

     scrollToTop(view: view) 
    } 

    var isScrolledToTop: Bool { 
     if self is UITableViewController { 
      return (self as! UITableViewController).tableView.contentOffset.y == 0 
     } 
     for subView in view.subviews { 
      if let scrollView = subView as? UIScrollView { 
       return (scrollView.contentOffset.y == 0) 
      } 
     } 
     return true 
} 
} 

Mit diesem (so kann ich die spezifische Maßnahmen zu einem bestimmten tabBarItem):

func tabBarController(_ tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) { 
    if tabBarController.selectedIndex == 0 { 
     // present your first view controller 
    } 
    else if tabBarController.selectedIndex == 1 { 
     // present your second view controller 
    } 
    else if tabBarController.selectedIndex == 2 { 
     // present your third view controller 
    } 

} 

Danke für Ihre Hilfe ...

Antwort

1

diesen Code Versuchen. Verwenden Sie den TAP-Gestenerkenner.

class MyTabBarController: UITabBarController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     let tap = UITapGestureRecognizer() 
     tap.numberOfTapsRequired = 2 
     tap.addTarget(self, action: #selector(MyTabBarController.twiceTapped(sender:))) 
     tabBar.addGestureRecognizer(tap) 
    } 

    func twiceTapped(sender: UITapGestureRecognizer) { 
     // handle here 
    } 
} 
+0

Ich glaube nicht, dass Sie verstanden haben. Im Moment habe ich eine Funktion, die alle tabBarItems adressiert. Aber ich möchte zusätzlich zu dieser Funktion. To tabbarItem bei Index 3 zu sagen, eine ViewController beim Tippen angezeigt. –

0

Lassen Sie mich sehen, ob ich dieses Recht bekommen: Sie wollen etwas, basierend auf dem Punkt (erste, zweite, usw.) ausgewählt in der Tab-Leiste tun. Wenn ja, ich glaube, Sie können dies auf dem Tag Ihres Artikels basiert verwenden (wenn Sie die Delegierten eingestellt):

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) { 
    switch item.tag { 
    case 1: 
     // your code 
    default: 
     // your code 
    } 
} 

Und vergessen Sie nicht, den Tag von jedem Ihres itens in der Tab-Leiste zu setzen.

+0

Ja, ich weiß das, aber ich kann nicht beide verwenden sollte auswählen und wählte Funktionen im fragen um Hilfe zu kombinieren, so beide Funktionen erhalten –

Verwandte Themen