ios - كيف يمكنني تحميل لوحة العمل برمجيًا من الفصل؟




objective-c xcode (5)

سويفت 3

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "viewController")
self.navigationController!.pushViewController(vc, animated: true)

سويفت 2

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("viewController")
self.navigationController!.pushViewController(vc, animated: true)

المتطلبات المسبقة

قم بتعيين معرف لوحة العمل إلى جهاز تحكم العرض الخاص بك.

IB> إظهار مفتش الهوية> الهوية> معرف لوحة العمل

سويفت (ميراث)

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("viewController") as? UIViewController
self.navigationController!.pushViewController(vc!, animated: true)

تعديل: اقترح Swift 2 في تعليق بقلم A.

مشكلتي هي أنني كنت أبحث عن طريقة لاستخدام كل من القصص المصورة و xib . ولكن لا يمكنني العثور على طريقة مناسبة لتحميل وعرض القصة المصورة برمجيا. بدأ مشروع تطوير مع xib ، والآن من الصعب جدا أن تعش جميع ملفات xib في لوحة العمل. لذلك كنت أبحث عن طريقة لفعل ذلك في الكود ، كما هو الحال مع alloc, init, push على viewControllers. في حالتي ليس لدي سوى وحدة تحكم واحدة في لوحة العمل: UITableViewController ، والتي تحتوي على خلايا ثابتة بها بعض المحتوى الذي أريد إظهاره. إذا كان أي شخص يعرف الطريقة الصحيحة للعمل مع كل من xib و القصة المصورة بدون إعادة بناء ضخمة ، سأكون ممتنا للحصول على أي مساعدة.


بالنسبة إلى الإصدارين 3 و 4 السريع ، يمكنك إجراء ذلك. يتم تعيين الممارسة الجيدة اسم Storyboard يساوي StoryboardID.

enum StoryBoardName{
   case second = "SecondViewController"
}
extension UIStoryBoard{
   class func load(_ storyboard: StoryBoardName) -> UIViewController{
      return UIStoryboard(name: storyboard.rawValue, bundle: nil).instantiateViewController(withIdentifier: storyboard.rawValue)
   }
}

ثم يمكنك تحميل Storyboard الخاص بك في ViewController الخاص بك مثل هذا:

class MyViewController: UIViewController{
     override func viewDidLoad() {
        super.viewDidLoad()
        guard let vc = UIStoryboard.load(.second) as? SecondViewController else {return}
        self.present(vc, animated: true, completion: nil)
     }

}

عند إنشاء لوحة القصة الجديدة ، قم بتعيين نفس الاسم على StoryboardID وإضافة اسم Storyboard في التعداد الخاص بك " StoryBoardName "


في سريع
NavigationController و pushController يمكنك استبدالها

present(vc, animated:true , completion: nil)

في لوحة العمل ، انتقل إلى عارض السمات وعيّن معرف وحدة تحكم العرض. يمكنك بعد ذلك تقديم وحدة تحكم طريقة العرض هذه باستخدام التعليمة البرمجية التالية.

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"myViewController"];
vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentViewController:vc animated:YES completion:NULL];

يمكنك دائما القفز مباشرة إلى وحدة تحكم الجذر:

UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *vc = [storyboard instantiateInitialViewController];
vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentViewController:vc animated:YES completion:NULL];




xib