स्विफ्ट का उपयोग करके एक व्यू कंट्रोलर से दूसरे में कैसे नेविगेट करें


84

मैं एक दृश्य नियंत्रक से दूसरे में नेविगेट करना चाहूंगा। मैं निम्नलिखित उद्देश्य-सी कोड को स्विफ्ट में कैसे बदल सकता हूं?

UIViewController *viewController = [[self storyboard] instantiateViewControllerWithIdentifier:@"Identifier"];
UINavigationController *navi = [[UINavigationController alloc] initWithRootViewController:viewController];
[self.navigationController pushViewController:navi animated:YES];

जवाबों:


208

दूसरे दृश्य नियंत्रक के लिए एक स्विफ्ट फ़ाइल (SecondViewController.swift) बनाएं और उपयुक्त फ़ंक्शन में इसे लिखें:

let secondViewController = self.storyboard.instantiateViewControllerWithIdentifier("SecondViewController") as SecondViewController
self.navigationController.pushViewController(secondViewController, animated: true)


स्विफ्ट 2+

let mapViewControllerObj = self.storyboard?.instantiateViewControllerWithIdentifier("MapViewControllerIdentifier") as? MapViewController
self.navigationController?.pushViewController(mapViewControllerObj!, animated: true)

स्विफ्ट 4

let vc = UIStoryboard.init(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "IKDetailVC") as? IKDetailVC
self.navigationController?.pushViewController(vc!, animated: true)

@ ऑड्रे, हाय, कैसे स्थापित करें नेविगेशनकंट्रोलर?
संजीवनी

@ संजीवनी, हाय आपका व्यू कंट्रोलर स्टोरीबोर्ड के साथ बनाया जा सकता है और अपने पहले व्यू कंट्रोलर को rootViewController.Your नेविगेशन कंट्रोलर (स्विफ्ट) के रूप में असाइन करें जो इस तरह दिखाई देगा:import UIKit class SwiftNavigationController: UINavigationController { init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) { super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) // Custom initialization }`` override func viewDidLoad() { super.viewDidLoad() }
ऑड्रे सोबगौ ज़ेबेज

3
मेरे पास भी यही समस्या थी, मैं इस बात पर अड़ा हुआ था कि एक ViewController से दूसरे में कैसे नेविगेट किया जाए। जब मैंने इस कोड की कोशिश की, तो मुझे यह त्रुटि मिल रही है: unexpectedly found nil while unwrapping an Optional valueआपके कोड की दूसरी पंक्ति में। कृपया मदद करें
राघवेन्द्र

1
मुझे एनिमेटेड के साथ एक समस्या हो रही है: पैरामीटर जैसे: "अभिव्यक्ति के प्रकार को '$ T7 ??' में परिवर्तित नहीं किया जा सकता है।" टाइप करने के लिए 'BooleanLiteralConvertible' "।
मॉर्कॉम

2
आपको यह सुनिश्चित करने की आवश्यकता है कि आपके नियंत्रक इस काम के लिए एक नेविगेशनकोन्ट्रोलर में एम्बेडेड हैं, अन्यथा आपको त्रुटियां मिलेंगी।
काकुबई

35

मेरे अनुभव navigationControllerमें शून्य था इसलिए मैंने अपना कोड इसे बदल दिया:

let next = self.storyboard?.instantiateViewControllerWithIdentifier("DashboardController") as! DashboardController
self.presentViewController(next, animated: true, completion: nil)

-> StoryBoard Idमें ViewController सेट करने के लिए मत भूलनाStoryBoardidentity inspector


2
इसका कारण यह है कि आपके व्यू कंट्रोलर को नेविगेशन व्यू कंट्रोलर में ईबे नहीं किया गया था।
फ्रांसिस रेनॉल्ड्स

18

यदि आप नहीं चाहते हैं कि बैक बटन दिखाई दे (जो मेरा मामला था, क्योंकि मैं एक उपयोगकर्ता द्वारा लॉग इन करने के बाद प्रस्तुत करना चाहता था) यहाँ है कि किस प्रकार नेव कंट्रोलर की जड़ को सेट करें:

let vc = self.storyboard?.instantiateViewControllerWithIdentifier("YourViewController") as! YourViewController
        let navigationController = UINavigationController(rootViewController: vc)
        self.presentViewController(navigationController, animated: true, completion: nil)

16

स्विफ्ट 3.01

let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "Conversation_VC") as! Conversation_VC
self.navigationController?.pushViewController(secondViewController, animated: true)

7

स्विफ्ट 4.0 में

var viewController: UIViewController? = storyboard().instantiateViewController(withIdentifier: "Identifier")
var navi = UINavigationController(rootViewController: viewController!)
navigationController?.pushViewController(navi, animated: true)

4

स्विफ्ट 3

let secondviewController:UIViewController =  self.storyboard?.instantiateViewController(withIdentifier: "StoryboardIdOfsecondviewController") as? SecondViewController

self.navigationController?.pushViewController(secondviewController, animated: true)

4

स्विफ्ट 4.1 और एक्सकोड 10 में

यहां AddFileViewController दूसरा व्यू कंट्रोलर है।

स्टोरीबोर्ड आईडी AFVC है

let next = self.storyboard?.instantiateViewController(withIdentifier: "AFVC") as! AddFileViewController
self.present(next, animated: true, completion: nil)

//OR

//If your VC is DashboardViewController
let dashboard = self.storyboard?.instantiateViewController(withIdentifier: "DBVC") as! DashboardViewController
self.navigationController?.pushViewController(dashboard, animated: true)

यदि आवश्यक हो तो थ्रेड का उपयोग करें

उदाहरण के लिए:

DispatchQueue.main.async { 
    let next = self.storyboard?.instantiateViewController(withIdentifier: "AFVC") as! AddFileViewController
    self.present(next, animated: true, completion: nil) 
}

अगर आप कुछ समय बाद चलना चाहते हैं

पूर्व:

//To call or execute function after some time(After 5 sec)
DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) {
    let next = self.storyboard?.instantiateViewController(withIdentifier: "AFVC") as! AddFileViewController
    self.present(next, animated: true, completion: nil) 
} 

2

स्विफ्ट 3 में

let nextVC = self.storyboard?.instantiateViewController(withIdentifier: "NextViewController") as! NextViewController        
self.navigationController?.pushViewController(nextVC, animated: true)

2
let objViewController = self.storyboard?.instantiateViewController(withIdentifier: "ViewController") as! ViewController
self.navigationController?.pushViewController(objViewController, animated: true)

क्या आप शीघ्र ही बता सकते हैं कि आपका कोड क्या करता है, क्यों यह समस्या को हल करता है और यह अन्य सभी उत्तरों से अलग कैसे है।
जेजे

यहाँ मैं पहचानकर्ता के रूप में स्टोरीबोर्ड आईडी का उपयोग कर रहा हूं। संदर्भ (objViewController) को देखने वाले कंट्रोलर क्लास पर नियंत्रण को आगे बढ़ाएं
डेवेंडर वर्मा

2
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let home = storyBoard.instantiateViewController(withIdentifier: "HOMEVC") as! HOMEVC
navigationController?.pushViewController(home, animated: true);

मुझे लगता है कि यह स्विफ्ट या ओब्जेक्ट सिंटैक्स नहीं है
स्पेल्ट

1

स्विफ्ट 4

आप नेविगेशन नियंत्रक को धक्का देकर स्क्रीन को स्विच कर सकते हैं सबसे पहले आपको UIViewController के साथ नेविगेशन नियंत्रक सेट करना होगा

let vc = self.storyboard?.instantiateViewController(withIdentifier: "YourStoryboardID") as! swiftClassName

self.navigationController?.pushViewController(vc, animated: true)

1

स्विफ्ट 5

एक दृश्य नियंत्रक से दूसरे दृश्य नियंत्रक पर नेविगेशन करने के लिए सेग का उपयोग करें:

performSegue(withIdentifier: "idView", sender: self)

यह Xcode 10.2 पर काम करता है।


बहस का प्रकार?
विकासकर्ता

1

AppDelegate में आप इस तरह लिख सकते हैं ...

var window: UIWindow?

fileprivate let navigationCtrl = UINavigationController()

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    self.createWindow()

    self.showLoginVC()

    return true
}

func createWindow() {
    let screenSize = UIScreen.main.bounds
    self.window = UIWindow(frame: screenSize)
    self.window?.backgroundColor = UIColor.white
    self.window?.makeKeyAndVisible()
    self.window?.rootViewController = navigationCtrl
}

func showLoginVC() {
    let storyboardBundle = Bundle.main
    // let storyboardBundle = Bundle(for: ClassName.self) // if you are not using main application, means may be you are crating a framework or library you can use this statement instead
    let storyboard = UIStoryboard(name: "LoginVC", bundle: storyboardBundle)
    let loginVC = storyboard.instantiateViewController(withIdentifier: "LoginVC") as! LoginVC
    navigationCtrl.pushViewController(loginVC, animated: false)
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.