सवाल केवल स्विफ्ट का उपयोग करके कोड के साथ एक नए दृश्य नियंत्रक में संक्रमण कैसे करें


मैं व्यू कंट्रोलर से दूसरे व्यू कंट्रोलर में संक्रमण करना चाहता हूं, जब उपयोगकर्ता केवल यूआईबटन दबाता है, केवल स्विफ्ट में कोड का उपयोग कर।

//Function to transition
func transition(Sender: UIButton!)
{   
    //Current Code, default colour is black
    let secondViewController:UIViewController = UIViewController()
    self.presentViewController(secondViewController, animated: true, completion: nil)

 }

44
2018-06-11 15:37


मूल


क्या यह काम नहीं कर रहा है? क्या यह आपको एक त्रुटि दे रहा है? आपने कोशिश की है self.presentViewController(...)? - Jack
जब मैं दूसरे दृश्य नियंत्रक में परिवर्तन करने का प्रयास करता हूं, तो मुझे एक ब्लैक स्क्रीन मिलती है, लेकिन कोई त्रुटि नहीं होती है। क्या यह तथ्य होगा कि मेरे पास दो अलग-अलग फ़ाइलों में है। तो मुख्य पहला दृश्य नियंत्रक ViewController.swift में है और दूसरा दूसरा ViewController.swift में है? - Stephen Fox
वह कोड दिखाएं जिसका आपने वास्तव में उपयोग किया था जो आपको ब्लैक स्क्रीन दे रहा है। - rdelmar
आप वास्तव में इसे कैसे कार्यान्वित कर रहे हैं? जिस तरह से यह लिखा गया है वह वर्तमान दृश्य नियंत्रक फ़ंक्शन का वर्णन जैसा दिखता है। ऐसा लगता है कि ऐसा दिखना चाहिए self.presentViewController(self.secondViewController, true, nil) या इसी के समान। - Stakenborg
मेरे पास जो कोड है वह ब्लैक स्क्रीन दे रहा है: self.presentViewController (secondViewController, एनिमेटेड: सत्य, समापन: शून्य) - Stephen Fox


जवाब:


समस्या यह है कि आपका कोड रिक्त UIViewController बना रहा है, न कि दूसरा व्यू कंट्रोलर। आपको अपने उप-वर्ग का उदाहरण बनाना होगा, न कि UIViewController,

func transition(Sender: UIButton!) {   
    let secondViewController:SecondViewController = SecondViewController()

    self.presentViewController(secondViewController, animated: true, completion: nil)

 }

यदि आपने अपने द्वितीय दृश्य नियंत्रक वर्ग में init (nibName nibName: स्ट्रिंग!, बंडल nibBundle: NSBundle!) ओवरराइड किया है, तो आपको कोड को बदलने की आवश्यकता है,

let sec: SecondViewController = SecondViewController(nibName: nil, bundle: nil)

54
2018-06-11 16:09



स्विफ्ट 3 का उपयोग करने वालों के लिए, "presentViewController" केवल "मौजूद" में बदल जाता है। बाकी सब कुछ वही रहता है - Micah Montoya
इस कोड का उपयोग करने का एक तरीका है लेकिन खोले गए व्यू कंट्रोलर में "बैक बटन" दिखाएं? - JCarlos
@JCarlos, बैक बटन कुछ ऐसा है जो नेविगेशन नियंत्रक के साथ आता है। आपको नेविगेशन कंट्रोलर के दृश्य नियंत्रकों की सरणी में अपने विचारों को एम्बेड करने की आवश्यकता है, और यह आपके लिए एक बैक बटन प्रदान करेगा और इसके संक्रमण को प्रबंधित करेगा। - ScottyBlades


यह मेरे लिए पूरी तरह से काम किया:

func switchScreen() {
    let mainStoryboard = UIStoryboard(name: "Storyboard", bundle: NSBundle.mainBundle())
    let vc : UIViewController = mainStoryboard.instantiateViewControllerWithIdentifier("vcMainLogin") as UIViewController
    self.presentViewController(vc, animated: true, completion: nil)
}

33
2018-06-22 09:45



यह उत्तर अलग स्टोरीबोर्ड के लिए काम करता है। - Jonathan Solorzano


स्विफ्ट

आम तौर पर सामान्य संक्रमण के लिए हम उपयोग करते हैं,

let next:SecondViewController = SecondViewController()
self.presentViewController(next, animated: true, completion: nil)

लेकिन कभी-कभी नेविगेशन नियंत्रक का उपयोग करते समय, आपको सामना करना पड़ सकता है काला चित्रपट। उस स्थिति में, आपको इस तरह उपयोग करने की ज़रूरत है,

let next:ThirdViewController = storyboard?.instantiateViewControllerWithIdentifier("ThirdViewController") as! ThirdViewController
self.navigationController?.pushViewController(next, animated: true)

इसके अलावा उपरोक्त समाधान में से कोई भी नेविगेशनबार को संरक्षित करता है जब आप स्टोरीबोर्ड या सिंगल xib से दूसरे xib पर कॉल करते हैं। यदि आप नेविगेशन बार का उपयोग करते हैं और इसे सामान्य धक्का की तरह संरक्षित करना चाहते हैं, तो आपको इसका उपयोग करना होगा,

मान लें, "MyViewController" MyViewController के लिए पहचानकर्ता है

let viewController = MyViewController(nibName: "MyViewController", bundle: nil)
self.navigationController?.pushViewController(viewController, animated: true)

11
2018-04-22 06:40



यह खाली क्यों जाता है? और फिर हमें इसका उपयोग करने की ज़रूरत क्यों है? - Rohit Tigga
जब मेरी स्टोरी बोर्ड पर प्रवेश बिंदु एक साधारण UIViewController है और मैं इसे देखने के लिए अपने दृश्यडिडलोड () में प्रयास करता हूं: self.navigationController? .PushViewController (viewController, एनिमेटेड: सत्य) तो self.navigationController? हमेशा शून्य होता है इसलिए कोई संक्रमण नहीं होता है। किसी भी सहायता के लिए धन्यवाद। - Maxim
@Maxim आपको अपने प्रारंभिक दृश्य नियंत्रक को नेविगेशन नियंत्रक में एम्बेड करना होगा। अन्यथा यह हमेशा शून्य हो जाएगा। एम्बेड करने के लिए, चुनें InitViewController -> Editor -> Embed In -> Navigation Controller। - Sazzad Hissain Khan
नमस्ते @SazzadHissainKhan आप का क्या मतलब था "इसके अलावा उपर्युक्त समाधान में से कोई भी नेविगेशनबार को संरक्षित करता है जब आप स्टोरीबोर्ड या सिंगल xib से दूसरे xib पर कॉल करते हैं।" - LShi
समझ गया। मेरे पास स्टोरीबोर्ड में मेरा वीसी है; तो, आपकी सामग्री का एक कॉम्बो काम किया। मेरा यूआईसेजमेंट कंट्रोल के अंदर एम्बेडेड वीसी से लॉन्च किया गया है: अगला: VCAutoPayments = storyboard? .InstantiateViewController (withIdentifier: "VCAutoPayments") के रूप में! VCAutoPayments self.present (अगला, एनिमेटेड: सत्य, समापन: शून्य) देखें stackoverflow.com/questions/51105728/... - codeslapper


आपका कोड ठीक है। आपको ब्लैक स्क्रीन मिल रही है क्योंकि आपके दूसरे व्यू कंट्रोलर पर कुछ भी नहीं है।

कुछ ऐसा करने का प्रयास करें:

secondViewController.view.backgroundColor = UIColor.redColor();

अब दृश्य नियंत्रक यह दिखाता है लाल होना चाहिए।

वास्तव में कुछ करने के लिए secondViewController, का एक उपclass बनाएँ UIViewController और इसके बजाय

let secondViewController:UIViewController = UIViewController()

अपने दूसरे दृश्य नियंत्रक का एक उदाहरण बनाएं:

//If using code
let secondViewController = MyCustomViewController.alloc()

//If using storyboard, assuming you have a view controller with storyboard ID "MyCustomViewController"
let secondViewController = self.storyboard.instantiateViewControllerWithIdentifier("MyCustomViewController") as UIViewController

9
2018-06-11 16:02



हां, यह काम करता है, लेकिन संक्रमण के बाद एक नई। स्विफ्ट फ़ाइल में नए व्यू कंट्रोलर के लिए इस कोड को लागू करने का कोई तरीका है? तो मैं नई फाइल में UITextFields और UILabels आदि बना सकता हूं? - Stephen Fox
मेरा जवाब अपडेट किया गया। - Lord Zsolt


.Xib फ़ाइल में स्टोरीबोर्ड के साथ दूसरे व्यू कंट्रोलर का उपयोग करने वाले लोगों के लिए, आप अपने कन्स्ट्रक्टर में .xib फ़ाइल के नाम का उपयोग करना चाहेंगे (.xib प्रत्यय के बिना)।

let settings_dialog:SettingsViewController = SettingsViewController(nibName: "SettingsViewController", bundle: nil)
self.presentViewController(settings_dialog, animated: true, completion: nil)

3
2017-08-26 20:45



धन्यवाद। यह मेरे लिए काम किया - Luis Valdés
सुन के अच्छा लगा! - DaveUT


आईओएस 8 पर ऐसा करने के लिए, मुझे यही करना है:

मेरे पास शीर्षक वाली एक त्वरित श्रेणी फ़ाइल है SettingsView.swift और नाम की एक .xib फ़ाइल SettingsView.xib। मैं इसे चलाता हूँ MasterViewController.swift (या कोई दृश्य नियंत्रक वास्तव में एक दूसरा दृश्य नियंत्रक खोलने के लिए)

@IBAction func openSettings(sender: AnyObject) {
        var mySettings: SettingsView = SettingsView(nibName: "SettingsView", bundle: nil) /<--- Notice this "nibName" 
        var modalStyle: UIModalTransitionStyle = UIModalTransitionStyle.CoverVertical
        mySettings.modalTransitionStyle = modalStyle
        self.presentViewController(mySettings, animated: true, completion: nil)

    }

2
2017-11-29 06:40





स्विफ्ट 2.0 में आप इस विधि का उपयोग कर सकते हैं:

    let registrationView = LMRegistration()
    self.presentViewController(registrationView, animated: true, completion: nil)

2
2018-01-25 15:57





हमेशा nibName फ़ाइल का उपयोग करें अन्यथा Xib की आपकी प्रीलोडेड सामग्री दिखाई नहीं देगी।

vc : ViewController =  ViewController(nibName: "ViewController", bundle: nil) //change this to your class name

 self.presentViewController(vc, animated: true, completion: nil)

1
2018-05-24 03:26





स्विफ्ट 3 के लिए अपडेट किया गया, इनमें से कुछ उत्तर थोड़ा पुराना है।

let mainStoryboard = UIStoryboard(name: "Main", bundle: Bundle.main)
        let vc : UIViewController = mainStoryboard.instantiateViewController(withIdentifier: "myStoryboardID") as UIViewController
        self.present(vc, animated: true, completion: nil)    }

1
2018-06-13 21:49