سؤال

هل يمكن لأي شخص أن يعطيني رمز المثال الذي يمكنني استخدامه لتقديم وحدة تحكم عرض مشروط لأول مرة، ثم رفضه؟ هذا ما كنت أحاول:

 NSLOG (@ "٪٪ @"، Blue.ModalViewController)؛ [الأزرق presentmodalviewcontroller: الأحمر المتحركة: نعم]؛ NSLOG (@ "٪٪ @"، Blue.ModalViewController)؛ [Dred BlueModalViewControllerAlated: نعم]؛ NSLOG (@ "٪٪ @"، Blue.ModalViewController)؛
هذا الرمز موجود في ViewDIDLoad ("Blue" و "Red" كلاهما فئة فرعية من UiviewController). أتوقع أن أظهر الرأي الأحمر ثم إخفاءها على الفور، مع بعض الرسوم المتحركة. ومع ذلك، تقدم هذه القطعة فقط عرض مشروط فقط ولا يرفضها. اي فكرة؟ يظهر السجل الأول "Null" أثناء عرض السجلاتu003CRedViewController: 0x3d21bf0>
نقطة أخرى هي، إذا وضعت هذا الرمز في ApplicationDidfinishLaunching: لا تظهر طريقة العرض الحمراء على الإطلاق، وجميع السجلات تحصل على "Null"

هل كانت مفيدة؟

المحلول

بادئ ذي بدء، عندما تضع هذا الرمز في ApplicateDididFinishLaunching، قد يكون الأمر كذلك أن تحكم المراقبين مثيل لها من منشئ الواجهة لا يرتبط بعد بتطبيقك (حتى "أحمر" و "الأزرق" لا تزال nil).

ولكن للإجابة على سؤالك الأولي، ما تفعله خطأ هو أنك تتصل dismissModalViewControllerAnimated: على وحدة تحكم خاطئة! يجب أن يكون مثل هذا:

[blue presentModalViewController:red animated:YES];
[red dismissModalViewControllerAnimated:YES];

عادة يجب أن تقرر وحدة التحكم "الأحمر" رفض نفسه في مرحلة ما (ربما يتم عند النقر فوق زر "إلغاء"). ثم وحدة التحكم "الأحمر" يمكن استدعاء الطريقة self:

[self dismissModalViewControllerAnimated:YES];

إذا كان لا يزال لا يعمل، فقد يكون له علاقة بحقيقة أن وحدة التحكم يتم تقديمها في أزياء الرسوم المتحركة، لذلك قد لا يسمح لك بإغلاق وحدة التحكم في وقت قصير من تقديمه.

نصائح أخرى

كانت أسهل طريقة تعبني في Xcode 4.52 لإنشاء طريقة عرض إضافية وتوصيلها باستخدام Segue Modal (عنصر التحكم اسحب الزر من عرض واحد إلى العرض الثاني، اختار Modal). ثم اسحب في زر إلى العرض الثاني أو عرض مشروط قمت بإنشائه. التحكم واسحب هذا الزر إلى ملف الرأس واستخدام اتصال الإجراء. سيؤدي ذلك إلى إنشاء IBaction في ملف التحكم الخاص بك. ابحث عن نوع الإجراء الخاص بك في التعليمات البرمجية.

[self dismissViewControllerAnimated:YES completion:nil];

سويفت

تم التحديث ل SWIFT 3

enter image description here

القصة المصورة

قم بإنشاء جهاز تحكم عرضين مع زر واحد. لوحدة تحكم الرؤية الثانية، قم بتعيين اسم الفصل SecondViewController ومعرف لوحة العمل ل secondVC.

شفرة

viewcontroller.swift.

import UIKit
class ViewController: UIViewController {

    @IBAction func presentButtonTapped(_ sender: UIButton) {

        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let myModalViewController = storyboard.instantiateViewController(withIdentifier: "secondVC")
        myModalViewController.modalPresentationStyle = UIModalPresentationStyle.fullScreen
        myModalViewController.modalTransitionStyle = UIModalTransitionStyle.coverVertical
        self.present(myModalViewController, animated: true, completion: nil)
    }
}

secondviewcontroller.swift.

import UIKit
class SecondViewController: UIViewController {

    @IBAction func dismissButtonTapped(_ sender: UIButton) {
        self.dismiss(animated: true, completion: nil)
    }
}

مصدر:

presentmodalviewcontroller:

MainViewController *mainViewController=[[MainViewController alloc]init];
[self.navigationController presentModalViewController:mainViewController animated:YES];

استبدال ModalViewController:

[self dismissModalViewControllerAnimated:YES];

سويفت

self.dismissViewControllerAnimated(true, completion: nil)

أسهل طريقة للقيام بذلك تستخدم لوحة القصة المصورة وجزئة.

ما عليك سوى إنشاء مجموعة من النظارات الأولى من OrtViewController (وليس وحدة تحكم التنقل) من TabbarController الخاص بك إلى LoginViewController مع تسجيل الدخول UI واسمها "Showlogin".

قم بإنشاء طريقة تقوم بإرجاع BOOL للتحقق من صحة ما إذا كان المستخدم الذي قام بتسجيل الدخول و / أو جلسته ساري المفعول ... يفضل أن يكون على AppDelegate. نسميها isscessionvalid.

على OriberViewController.M تجاوز طريقة ViewDidAppear كما يلي:

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    if([self isSessionValid]==NO){
        [self performSegueWithIdentifier:@"showLogin" sender:self];
    }
}

ثم إذا قام المستخدم بتسجيل الدخول بنجاح، فما عليك سوى إقالة أو منبوذ LOGNVIVENTroller لإظهار علامات التبويب الخاصة بك.

يعمل 100٪!

آمل أن يساعد!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top