স্টোরিবোর্ড ব্যবহার না করে আমি কীভাবে একটি নতুন সুইফ্ট প্রকল্প তৈরি করব?


107

এক্সকোড 6 এ একটি নতুন প্রকল্প তৈরি স্টোরিবোর্ডগুলি অক্ষম করার অনুমতি দেয় না। আপনি কেবল সুইফট বা অবজেক্টিভ-সি নির্বাচন করতে পারেন এবং কোর ডেটা ব্যবহার বা না করতে পারেন।

আমি স্টোরিবোর্ডটি মুছে ফেলার চেষ্টা করেছি এবং প্রকল্প থেকে মূল স্টোরিবোর্ডটি সরিয়েছি এবং ম্যানুয়ালি ডিডফিনিশলঞ্চিং থেকে উইন্ডোটি সেট করেছিলাম

অ্যাপলিজেটে আমার কাছে এটি রয়েছে:

class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow
var testNavigationController: UINavigationController

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {

        testNavigationController = UINavigationController()
        var testViewController: UIViewController = UIViewController()
        self.testNavigationController.pushViewController(testViewController, animated: false)

        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)

        self.window.rootViewController = testNavigationController

        self.window.backgroundColor = UIColor.whiteColor()

        self.window.makeKeyAndVisible()

        return true
    }
}

তবে এক্সকোড আমাকে একটি ত্রুটি দেয়:

ক্লাস 'অ্যাপডেলিগেট' এর কোনও আরম্ভকারী নেই

কেউ কি এতে সফল হয়েছেন?


উত্তর:


71

আপনি চিহ্নিত করতে হবে windowএবং testNavigationControllerঐচ্ছিক হিসাবে ভেরিয়েবল:

var window : UIWindow?
var testNavigationController : UINavigationController?

সুইফ্ট ক্লাসগুলি ইনস্ট্যান্টেশনের সময় অ-alচ্ছিক বৈশিষ্ট্যগুলির শুরু করতে হবে:

শ্রেণি এবং কাঠামোগুলি class শ্রেণি বা কাঠামোর উদাহরণ তৈরি হওয়ার সময় অবশ্যই তাদের সমস্ত সঞ্চিত বৈশিষ্ট্যকে একটি উপযুক্ত প্রাথমিক মানতে সেট করতে হবে। সঞ্চিত বৈশিষ্ট্যগুলি অনির্দিষ্ট অবস্থায় ছেড়ে দেওয়া যায় না।

Alচ্ছিক ধরণের বৈশিষ্ট্যগুলি স্বয়ংক্রিয়ভাবে শূন্যের একটি মান দিয়ে আরম্ভ করা হয়, এটি সূচিত করে যে সম্পত্তিটি ইচ্ছাকৃতভাবে ইনিশিয়েশন চলাকালীন "কোনও মান এখনও" রাখার উদ্দেশ্যে নয়।

Variচ্ছিক ভেরিয়েবলগুলি ব্যবহার করার সময় এগুলি মোড়ানো মনে রাখবেন !, যেমন:

self.window!.backgroundColor = UIColor.whiteColor();

1
শেষ অবধি সবকিছুই আপনার উত্তরে সঠিক ধারণা দেয় sense আপনি কি দয়া করে শেষ অংশটি ব্যাখ্যা করবেন ?? মোড়ক খোলা? এটি কি প্রয়োজনীয়?
ড্যানমুর

1
আপনি নিজের মধ্যে একটি অ-alচ্ছিক সম্পত্তি সংরক্ষণ করতে পারবেন না AppDelegate(যদি না এটি সূচনার সময় এর মান থাকে, বা এটি অলসভাবে সমাধান না করা হয়)। আপনি যদি একটি alচ্ছিক সম্পত্তি সঞ্চয় করেন এবং আপনি নিশ্চিত হন যে এটি নয় তবে nilআপনি !অপারেটরটি ব্যবহার করে "এটি এর বিকল্পধারা থেকে মোড়ক করুন" ।
আকাশীবস্কিই

সেরা অনুশীলন কি, স্ব। উইন্ডো! বা ব্যবহার করা যাক যদি উইন্ডো = ..?
হাসতে হাসতে

1
যদি আপনি নিশ্চিত হন যে আপনার উইন্ডোটি বিদ্যমান রয়েছে (এবং আপনি এই নির্দিষ্ট ক্ষেত্রে নিশ্চিত হতে পারেন) তবে আপনি সাথে যেতে পারেন !
আকাশীবস্কি

সুতরাং এর অর্থ কি যখন আমরা স্টোরিবোর্ডগুলি ব্যবহার করি, পটভূমির রঙটি কোনওরকম ডিফল্ট হয় .white?
মধু

91

স্টোরিবোর্ডগুলি ব্যবহার না করার জন্য যা লাগে তা সমস্ত rootViewController:

1 AppDelegate.swiftto এতে পরিবর্তন করুন:

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
        window = UIWindow(frame: UIScreen.main.bounds)
        if let window = window {
            window.backgroundColor = UIColor.white
            window.rootViewController = ViewController()
            window.makeKeyAndVisible()
        }
        return true
    }
}

2 ViewControllerof এর একটি সাবক্লাস তৈরি করুন UIViewController:

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = UIColor.blue
    }
}

3 you আপনি যদি কোনও এক্সকোড টেম্পলেট থেকে প্রকল্পটি তৈরি করেন:

  1. কী "Main storyboard file base name"থেকে কী-মান জোড়াটি মুছে ফেলুন Info.plist
  2. স্টোরিবোর্ড ফাইলটি মুছুন Main.storyboard

যেমন আপনি প্রথম কোড স্নিপেটে দেখতে পাচ্ছেন, optionচ্ছিকভাবে anচ্ছিকভাবে মোড়ক না দিয়ে বরং if letalচ্ছিক windowসম্পত্তি খোলার জন্য সিনট্যাক্সটি পছন্দ করি । এখানে আমি এটি if let a = a { }এমনভাবে ব্যবহার করছি যাতে alচ্ছিক একই নামের সাথে a- ifস্তরের ভিতরে একটি অ- alচ্ছিক রেফারেন্স হয়ে যায় - a

নিজের শ্রেণীর অভ্যন্তরে সম্পত্তি self.রেফারেন্স করার সময় অবশেষে প্রয়োজন হয় না window


1
কেন if let window = window {? আমি এটি খুঁজে বের! এটি তাই আপনার window!প্রতিবার ব্যবহার করার দরকার নেই ।
বিলাল আকিল

@ 2unco আমি খুশি যে আপনি এটি বের করে ফেলেছেন। এটি সম্পর্কে আমার উত্তরের শেষ অংশে বর্ণনা করা হয়েছে if let a = a {}
tobiasdm

আমি কলটি সেটিংয়ের পরেmakeKeyAndVisible() হতে সরাতে চাই । অন্যথায় আপনি উইন্ডোটিতে কীভাবে অ্যাপ্লিকেশন প্রবর্তন শেষে একটি রুট ভিউ নিয়ন্ত্রণকারী থাকবে বলে আশা করা যায় সে সম্পর্কে একটি সতর্কতা পাবেন। rootViewController
সেবাস্তিয়ান মার্টিন

if let a = a { }অদ্ভুত দেখাচ্ছে আপনি কি নিশ্চিত যে অ-alচ্ছিক রেফারেন্সের জন্য একই পরিবর্তনশীল নামটি ব্যবহার করা ঠিক আছে? অ্যাপল সর্বদা তাদের সুইফ্ট ডক্সে বিভিন্ন নাম ব্যবহার করে। এছাড়াও, কেন এটি window!প্রতিবার ব্যবহারের চেয়ে ভাল ?
ma11 শেই 28

1. if let a = a { }পুরোপুরি ঠিক আছে। আপনি if let anA = a { }যদি এটি আরও স্বাচ্ছন্দ্য বোধ করেন তবে আপনি ব্যবহার করতে পারেন । ২. window!একটি রানটাইম চেক যেহেতু আপনি একটি licitচ্ছিকভাবে সুস্পষ্টভাবে আনারপিং করছেন। আমি সুইফট আমাদের সরবরাহ করে এমন সংকলনের সময় চেকগুলি পছন্দ করি, তবে কেন এটি ব্যবহার করবেন না।
tobiasdm

13

আপনি যদি এক্সবি দিয়ে আপনার ভিউকন্ট্রোলারটি আরম্ভ করতে চান এবং এবং নেভিগেশন নিয়ামক ব্যবহার করতে চান। এখানে একটি টুকরা কোড।

var window: UIWindow?
var navController:UINavigationController?
var viewController:ViewController?

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    window = UIWindow(frame: UIScreen.mainScreen().bounds)

    viewController = ViewController(nibName: "ViewController", bundle: nil);
    navController = UINavigationController(rootViewController: viewController!);

    window?.rootViewController = navController;
    window?.makeKeyAndVisible()

    return true
}

6

নিম্নলিখিত কোড ব্যবহার করে দেখুন:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
    self.window!.backgroundColor = UIColor.whiteColor()

    // Create a nav/vc pair using the custom ViewController class

    let nav = UINavigationController()
    let vc = NextViewController ( nibName:"NextViewController", bundle: nil)

    // Push the vc onto the nav
    nav.pushViewController(vc, animated: false)

    // Set the window’s root view controller
    self.window!.rootViewController = nav

    // Present the window
    self.window!.makeKeyAndVisible()
    return true

}

2

এক্সকোড সেটআপের সাথে এর কোনও সম্পর্ক ছিল না এমন উত্তর আমি পেয়েছি, স্টোরিবোর্ড অপসারণ এবং প্রকল্প থেকে রেফারেন্সটি সঠিক জিনিস। এটি সুইফট সিনট্যাক্সের সাথে করতে হয়েছিল।

কোডটি নিম্নলিখিত:

class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?
var testNavigationController: UINavigationController?

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {

        self.testNavigationController = UINavigationController()
        var testViewController: UIViewController? = UIViewController()
        testViewController!.view.backgroundColor = UIColor.redColor()
        self.testNavigationController!.pushViewController(testViewController, animated: false)

        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)

        self.window!.rootViewController = testNavigationController

        self.window!.backgroundColor = UIColor.whiteColor()
        self.window!.makeKeyAndVisible()

        return true
    }

}

তবে কেন আপনার নিজের প্রশ্নের উত্তর দিন, যদি সমাধানটি অন্য উত্তরে থাকে?
আকাশীবস্কি

পৃষ্ঠা আপডেট করা হয়নি এবং আমি উত্তরটি দেখতে পেলাম না, কেবল পোস্ট করার পরে
EhTd

2

আপনি কেবল এটির মতো এটি করতে পারেন:

class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    var IndexNavigationController: UINavigationController?

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
        var IndexViewContoller : IndexViewController? = IndexViewController()
        self.IndexNavigationController = UINavigationController(rootViewController:IndexViewContoller)
        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        self.window!.rootViewController = self.IndexNavigationController
        self.window!.backgroundColor = UIColor.whiteColor()
        self.window!.makeKeyAndVisible()
        return true
    }
}

ভের উইন্ডো: ইউআই উইন্ডো? নির্দিষ্ট করুন যে এটি একটি alচ্ছিক সম্পত্তি?
শান ডানফোর্ড

ঠিক আছে, আমি এটিকে ছাড়াই কেবল অ্যাপের প্রতিনিধিদের মধ্যে দ্বিতীয় বার যোগ করার চেষ্টা করেছি এবং আমার উপরের বক্তব্যটি সত্য বলে খুঁজে পেয়েছি।
শান ডানফোর্ড

2

আমি আপনাকে নিয়ামক এবং xib ব্যবহার করার পরামর্শ দিচ্ছি

MyViewController.swift এবং MyViewController.xib

(আপনি ফাইল-> নতুন-> ফাইল-> কোকোয়া টাচ ক্লাসের মাধ্যমে তৈরি করতে পারেন এবং ইউআইভিউকন্ট্রোলারের সত্য, উপ শ্রেণি "এক্সআইবি ফাইল তৈরিও" সেট করতে পারেন)

class MyViewController: UIViewController {
   .....    
}

এবং AppDelegate.swift func applicationনিম্নলিখিত কোড লিখুন

....
var controller: MyViewController = MyViewController(nibName:"MyViewController",bundle:nil)
self.window!.rootViewController = controller
return true

এটা কাজ করা উচিত!


আপনি উল্লিখিতভাবে একইভাবে চেষ্টা করেছি কিন্তু ত্রুটি: অজানা ব্যতিক্রম 'এনএসআইটার্নাল ইনসোনসিটিসিটি এক্সপেশন' এর কারণে অ্যাপ্লিকেশনটি সমাপ্ত করা হচ্ছে, কারণ: 'বান্ডেলে এনআইবি লোড করা যায়নি:
shripad20


2

আপডেট: সুইফট 5 এবং আইওএস 13:

  1. একটি সিঙ্গল ভিউ অ্যাপ্লিকেশন তৈরি করুন।
  2. মুখ্য.স্টরিবোর্ড মুছুন (ডান ক্লিক করুন এবং মুছুন)।
  3. ফাইলের ডিফল্ট দৃশ্যের কনফিগারেশন থেকে স্টোরিবোর্ডের নাম মুছুন Info.plist:এখানে চিত্র বর্ণনা লিখুন
  4. খুলুন SceneDelegate.swiftএবং এর func sceneথেকে পরিবর্তন করুন :
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
    // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
    // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
    guard let _ = (scene as? UIWindowScene) else { return }
}

প্রতি

 func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
    // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
    // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).x

    if let windowScene = scene as? UIWindowScene {
        let window = UIWindow(windowScene: windowScene)
        window.rootViewController = ViewController()
        self.window = window
        window.makeKeyAndVisible()
    }
}

1

কোনও ইউআইএনএভিগেশন কন্ট্রোলারের জন্য সম্পূর্ণ সুইফ্ট পরীক্ষার উদাহরণ এখানে

        import UIKit
        @UIApplicationMain
        class KSZAppDelegate: UIResponder, UIApplicationDelegate {    
          var window: UIWindow?
          var testNavigationController: UINavigationController?

          func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
            // Override point for customization after application launch.        
            // Working WITHOUT Storyboard
            // see http://randexdev.com/2014/07/uicollectionview/
            // see http://stackoverflow.com/questions/24046898/how-do-i-create-a-new-swift-project-without-using-storyboards
            window = UIWindow(frame: UIScreen.mainScreen().bounds)
            if let win = window {
              win.opaque = true    
            //you could create the navigation controller in the applicationDidFinishLaunching: method of your application delegate.    
              var testViewController: UIViewController = UIViewController()
              testNavigationController = UINavigationController(rootViewController: testViewController)
              win.rootViewController = testNavigationController
              win.backgroundColor = UIColor.whiteColor()
              win.makeKeyAndVisible()
// see corresponding Obj-C in https://developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/NavigationControllers.html#//apple_ref/doc/uid/TP40011313-CH2-SW1
        //      - (void)applicationDidFinishLaunching:(UIApplication *)application {
        //    UIViewController *myViewController = [[MyViewController alloc] init];
        //    navigationController = [[UINavigationController alloc]
        //                                initWithRootViewController:myViewController];
        //    window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        //    window.rootViewController = navigationController;
        //    [window makeKeyAndVisible];
            //}
            }
            return true
          }
    }

0

আপনি কেবল একটি খালি অ্যাপ্লিকেশন তৈরি করেন না কেন? স্টোরিবোর্ডটি আমার কাছে তৈরি করা হয়নি ...


0

আমরা এক্সকোড 6 (আইওএস 8) এর স্টোরিবোর্ড ছাড়াই নেভিগেশন-ভিত্তিক অ্যাপ্লিকেশন তৈরি করতে পারি:

  • সুইফট হিসাবে প্রকল্পের ভাষাটি নির্বাচন করে একটি খালি অ্যাপ্লিকেশন তৈরি করুন।

  • ইন্টারফেস xib সহ নতুন কোকো টাচ ক্লাস ফাইল যুক্ত করুন। (যেমন। টেস্টভিউ নিয়ন্ত্রণকারী)

  • সুইফ্টে আমাদের কেবলমাত্র একটি ফাইল xib অর্থাত * * .সুইফ্ট ফাইলের সাথে ইন্টারেক্ট হয়, কোনও .h এবং .m ফাইল নেই।

  • আমরা এক্স 7- র নিয়ন্ত্রণগুলি আইওএস 7 এর মত সুইফট ফাইলের সাথে সংযুক্ত করতে পারি।

নিয়ন্ত্রণ এবং সুইফট সহ কাজের জন্য কয়েকটি স্নিপেট নীচে দেওয়া হয়েছে

//
//  TestViewController.swift
//

import UIKit

class TestViewController: UIViewController {

    @IBOutlet var testBtn : UIButton

    init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
        // Custom initialization
    }

    @IBAction func testActionOnBtn(sender : UIButton) {
        let cancelButtonTitle = NSLocalizedString("OK", comment: "")

        let alertController = UIAlertController(title: "Title", message: "Message", preferredStyle: .Alert)

        // Create the action.
        let cancelAction = UIAlertAction(title: cancelButtonTitle, style: .Cancel) { action in
            NSLog("The simple alert's cancel action occured.")
        }

        // Add the action.
        alertController.addAction(cancelAction)

        presentViewController(alertController, animated: true, completion: nil)
    }

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

}

AppDelegate.swift ফাইলটিতে পরিবর্তন

//
//  AppDelegate.swift
//

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    var navigationController: UINavigationController?

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        self.window!.backgroundColor = UIColor.whiteColor()
        self.window!.makeKeyAndVisible()

        var testController: TestViewController? = TestViewController(nibName: "TestViewController", bundle: nil)
        self.navigationController = UINavigationController(rootViewController: testController)
        self.window!.rootViewController = self.navigationController

        return true
    }

    func applicationWillResignActive(application: UIApplication) {
}

    func applicationDidEnterBackground(application: UIApplication) {
    }

    func applicationWillEnterForeground(application: UIApplication) {
    }

    func applicationDidBecomeActive(application: UIApplication) {
    }

    func applicationWillTerminate(application: UIApplication) {
    }

}

কোড নমুনা এবং অন্যান্য তথ্য খুঁজুন http://ashishkakkad.wordpress.com/2014/06/16/create-a-application-in-xcode-6-ios-8-without-storyborard-in-swift-language-and -work-সঙ্গে-নিয়ন্ত্রণ /


0

আইওএসে 13 এবং তারপরে যখন আপনি স্টোরিবোর্ড ছাড়াই নতুন প্রকল্পটি তৈরি করবেন নীচের পদক্ষেপগুলি:

  1. এক্সকোড 11 বা তার বেশি ব্যবহার করে প্রকল্প তৈরি করুন

  2. স্টোরিবোর্ড নিব এবং ক্লাস মুছুন

  3. Xib সহ নতুন নতুন ফাইল যুক্ত করুন

  4. ইউআইএনএভিগেশন কন্ট্রোলার সিনডেলিগেট হিসাবে রুট ভিউ সেট করা দরকার

  5. কোড ফানকের দৃশ্যের নীচে যুক্ত করুন (_ দৃশ্য: ইউআইসিসিন, উইলকনেক্টটও অধিবেশন: ইউআইসিসিনিশন, বিকল্পসমূহ সংযোগঅধ্যায়: ইউআইসিসিন.কনেকশনঅ্যাপশন) {// windowপ্রদত্ত ইউআইওয়াইন্ডোসেসনে ইউআই উইন্ডোটি বৈকল্পিকভাবে কনফিগার করতে এবং সংযুক্ত করতে এই পদ্ধতিটি ব্যবহার করুন scene। // যদি স্টোরিবোর্ড ব্যবহার করা হয়, windowসম্পত্তি স্বয়ংক্রিয়ভাবে আরম্ভ হবে এবং দৃশ্যের সাথে সংযুক্ত হবে। // এই প্রতিনিধি সংযুক্ত দৃশ্য বা সেশনটি নতুন (এর application:configurationForConnectingSceneSessionপরিবর্তে দেখুন) বোঝায় না । // প্রহরী যাক _ = (দৃশ্যটি? UIWindowScene) অন্য else ফিরে}

    যদি উইন্ডোজসিন = দৃশ্যটি হিসাবে দেওয়া হয়? UIWindowScene {self.window = UIWindow (উইন্ডোজসিন: উইন্ডোজসিইন) হোমউইককন্ট্রোলার হিসাবে হোমকন্ট্রোলারকে = হোমভিউ কনট্রোলারকে (ইউএনএভিগেশন কন্ট্রোলার) সেলফোনউইক-কন্ট্রোল! কন্ট্রোলউইনড্রো -কিন্ড করুন!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.