प्रोग्राम स्विफ्ट के भीतर टैब के बीच स्विच करना


83

आईओएस ऐप शुरू होने पर दूसरे टैब पर दृश्य स्विच करने के लिए मुझे कुछ कोड लिखना होगा (इसलिए, उदाहरण के लिए, दूसरा टैब पहले के बजाय डिफ़ॉल्ट रूप से दिखाया गया है)।

मैं स्विफ्ट के लिए नया हूं, और निम्नलिखित काम किया है:

  • कोड को संभवतः पहले टैब के ViewController के ओवरराइड फन व्यूडीडलॉड () फ़ंक्शन में जाना चाहिए।

  • निम्न कोड दूसरा ViewController दिखाता है, लेकिन तल पट्टी टैब के साथ नहीं (vcOptions दूसरा ViewController टैब आइटम है:

let vc : AnyObject! = self.storyboard.instantiateViewControllerWithIdentifier("vcOptions")
self.showViewController(vc as UIViewController, sender: vc)

मुझे लगता है कि उत्तर UITabbarController.selectedIndex = 1 का उपयोग करने में झूठ हो सकता है, लेकिन यह सुनिश्चित नहीं है कि इसे कैसे लागू किया जाए।

जवाबों:


142

यदि आपका window rootViewControllerहै UITabbarController(जो ज्यादातर मामलों में है) तो आप उपयोग कर सकते हैं tabbarमें didFinishLaunchingWithOptionsमें AppDelegateफ़ाइल।

func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {
    // Override point for customization after application launch.

    if let tabBarController = self.window!.rootViewController as? UITabBarController {
        tabBarController.selectedIndex = 1
    }

    return true
}

यह indexदिए गए (1) वाले टैब को खोल देगा selectedIndex

यदि आप ऐसा viewDidLoadकरते हैं firstViewController, तो आपको चयनित टैब का ट्रैक रखने के लिए ध्वज या किसी अन्य तरीके से प्रबंधित करने की आवश्यकता है। didFinishLaunchingWithOptionsअपनी AppDelegateफ़ाइल या rootViewControllerकस्टम वर्ग के लिए ऐसा करने का सबसे अच्छा स्थान viewDidLoad


मुझे इंगित करने के लिए टीएक्स! हालाँकि, मैं इसके साथ समाप्त हो गया: if let tababarController = self.window!.rootViewController as! UITabBarController? { tababarController.selectedIndex = tabIndex }
Marcin cwierczy Decski

क्या आप इसमें निम्नलिखित नहीं कर सकते हैं TabBarViewController: class TabBarViewController: UITabBarController { override func viewDidLoad() { super.viewDidLoad() selectedIndex = 1 }इस मामले में यह केवल द्वितीयक टैब का चयन करने जा रहा है जो ओपी करना चाहता है।
कोर्पेल

बस के as UITabBarControllerसाथ बदलें as! UITabBarControllerऔर यह स्विफ्ट 3 में भी काम करता है .. उत्तर के लिए धन्यवाद!
ममता

31

1. एक नया वर्ग बनाएं जो UITabBarController का समर्थन करता है। जैसे:

class xxx: UITabBarController {
override func viewDidLoad() {
        super.viewDidLoad()
}

2. फ़ंक्शन देखने के लिए निम्न कोड देखेंDidLoad ():

self.selectedIndex = 1; //set the tab index you want to show here, start from 0

3. स्टोरीबोर्ड पर जाएं, और अपने टैब बार नियंत्रक के कस्टम वर्ग को इस नए वर्ग में सेट करें। (तस्वीर में उदाहरण के रूप में MyVotes1)

यहाँ छवि विवरण दर्ज करें


इसने मेरे लिए Xcode 8.2 स्विफ्ट 3 में काम किया। धन्यवाद! मेरा ऐप 5 टैब का मध्य (तीसरा) टैब दिखाएगा। class PatientTabBarController: UITabBarController {ओवरराइड फ़ंक व्यूडीडलॉड () {super.viewDidLoad () सिलेक्टेडइंडेक्स = 2}}
ब्रायन

28

स्विफ्ट 3

आप इस कोड को index 0अपने tabBarController में डिफ़ॉल्ट दृश्य नियंत्रक ( ) में जोड़ सकते हैं :

    override func viewWillAppear(_ animated: Bool) {
        _ = self.tabBarController?.selectedIndex = 1
    }

लोड होने पर, यह सूची में टैब को स्वचालित रूप से दूसरे आइटम पर ले जाएगा, लेकिन उपयोगकर्ता को किसी भी समय मैन्युअल रूप से उस दृश्य पर वापस जाने की अनुमति देगा।


3
इसके बजाय "tabBarController? .SelectedIndex = 1" का उपयोग क्यों नहीं करते?
अहमदेज़ा

आपको हमेशा फोन करना चाहिए super.viewWillAppear()। साथ ही असाइनमेंट _ = अनावश्यक है।
कोएन।

20

व्यूकंट्रोलर को UITabBarControllerDelegate का बच्चा होना चाहिए । तो आपको बस SWIFT 3 पर निम्न कोड जोड़ना होगा

self.tabBarController?.selectedIndex = 1

18

@ कोडस्टर के उत्तर पर विस्तार करने के लिए, आपको जाँच करने और फिर असाइन करने की आवश्यकता नहीं है, आप इसे एक चरण में कर सकते हैं:

func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {
    // Override point for customization after application launch.

    if let tabBarController = self.window!.rootViewController as? UITabBarController {
        tabBarController.selectedIndex = 1
    }

    return true
}

5

एक विशिष्ट अनुप्रयोग में एक UITabBarController है और यह अपने टैब के रूप में 3 या अधिक UIViewController एम्बेड करता है। ऐसे में यदि आपने UITabBarController को YourTabBarController के रूप में उप-वर्ग किया है तो आप चयनित सूचकांक को बस द्वारा सेट कर सकते हैं:

selectedIndex = 1 // Displays 2nd tab. The index starts from 0.

यदि आप किसी अन्य दृश्य से YourTabBarController के लिए नेविगेट कर रहे हैं, तो उस दृश्य नियंत्रक की तैयारी (सेग के लिए :) विधि आप कर सकते हैं:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destination.
        // Pass the selected object to the new view controller.
        if segue.identifier == "SegueToYourTabBarController" {
            if let destVC = segue.destination as? YourTabBarController {
                destVC.selectedIndex = 0
            }
        }

मैं Xcode 10 और Swift 4.2 के साथ टैब सेट करने के इस तरीके का उपयोग कर रहा हूं।



2

बस अपडेट करने के लिए, iOS 13 के बाद, अब हमारे पास SceneDelegates है। इसलिए कोई भी दृश्य टैब चयन को SceneDelegate.swift में रखना पसंद कर सकता है:

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?

    func scene(_ scene: UIScene, 
               willConnectTo session: UISceneSession, 
               options connectionOptions: UIScene.ConnectionOptions) {

        guard let _ = (scene as? UIWindowScene) else { return }

        if let tabBarController = self.window!.rootViewController as? UITabBarController {
            tabBarController.selectedIndex = 1
        }

    }

0

यदि आप ऐसा कोड से करना चाहते हैं, जिसे आप किसी विशेष दृश्य नियंत्रक के हिस्से के रूप में लिख रहे हैं, जैसे कि एक बटन प्रेस या कुछ के जवाब में, आप यह कर सकते हैं:

@IBAction func pushSearchButton(_ sender: UIButton?) {
    if let tabBarController = self.navigationController?.tabBarController  {
        tabBarController.selectedIndex = 1
    }
}

और आप UITabBarControllerDelegate तरीकों का उपयोग करके टैब स्विचिंग को संभालने के लिए कोड भी जोड़ सकते हैं। प्रत्येक टैब के आधार दृश्य नियंत्रकों पर टैग का उपयोग करके, आप देख सकते हैं कि आप कहां हैं और तदनुसार कार्य करते हैं: उदाहरण के लिए

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
    
    // if we didn't change tabs, don't do anything
    if tabBarController.selectedViewController?.tabBarItem.tag ==  viewController.tabBarItem.tag {
        return false
    }
    
    if viewController.tabBarItem.tag == 4096 { // some particular tab
        // do stuff appropriate for a transition to this particular tab
    }
    else if viewController.tabBarItem.tag == 2048 { // some other tab
        // do stuff appropriate for a transition to this other tab
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.