قم بإيقاف تشغيل التبديل التلقائي عند النقر فوق UISWitch؟

StackOverflow https://stackoverflow.com/questions/1690715

  •  18-09-2019
  •  | 
  •  

سؤال

لذلك قمت بإنشاء جدول طبيئ مخصص، وفي النادرة أنا وضعت UISwitch. وبعد قبل أن أكون قد توجيهها حتى أي شيء، إذا ركضت في المحاكاة والنقر عليها، فسوف تبديل من الخروج إلى الرسوم المتحركة ومثلها.

أحاول إضافة ميزة حيث يسمح للمستخدم بالتغيير من إيقاف التشغيل عند وجود حالة معينة. أريد ذلك، عندما يلمس المستخدم التبديل، فهو يتحقق إذا كان الشرط صحيحا، وإذا لم يكن التبديل لا يتحرك.

لقد وضعت IBAction حيث إذا لمس المستخدم في الداخل، فسيقوم بتشغيل وظيفتي. وظيفتي هي:

if([on_switch isOn])
    {
        if([my_switch canSwitchOn])
        {
            NSLog(@"SWITCHED ON SUCCESSFULLY");
            [on_switch setOn:TRUE animated:TRUE];
        }
        else
        {
            NSLog(@"SWITCHED ON UNSUCCESSFULLY");
                        //Put in popup here
        }
    }
    else
    {
        [[ClassesSingleton sharedSingleton] classSwitchedOff:cell_index];
        [on_switch setOn:FALSE animated:TRUE];
    }

ومع ذلك، بغض النظر عن ما أقوم به، سيقلب هذا التبديل، على الرغم من أنني لم أعطاها أي توجيهات للقيام بذلك. أنا متأكد من أنها الوجه التلقائي الذي يسببه للقيام بذلك حتى قبل أن تكون مدمن مخدرات أي شيء. هل هناك طريقة لتحويل ذلك؟

شكرا!

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

المحلول

ما تحتاج إلى القيام به محدد userInteractionEnabled الممتلكات إلى false على الخاص بك UISwitch.

إذا كنت قد جعلت allready الاتصال في منشئ الواجهة إلى IBOutlet لقد قمت بإحكام في فصلك الخاص، وسوف تكون قادرا على تعيينه في التعليمات البرمجية مثل هذا:

mySwitch.userInteractionEnabled = NO;

يمكنك أيضا تعيين العقار مباشرة في منشئ الواجهة من خلال تحديد مربع الاختيار، كما هو موضح أدناه (ولكن في تطبيقك، فستحتاج إلى سلك الزر حتى IBOutlet على أي حال لتنفيذ المنطق الشرطي الخاص بك.)النص البديل http://www.clixtr.com/photo/ef06c1f7-8cca-40cd-A454-5CA534CEB9FE.

نصائح أخرى

أعتقد أنك ستحتاج إلى شيء مثل ما يلي:

// Somewhere just after the creation of _switch
[_switch addTarget:self action:@selector(switchValueDidChange:) forControlEvents:UIControlEventValueChanged];

// Target/Action method
- (void)switchValueDidChange:(UISwitch *)sender {
    if(sender.on && [self canSwitchOn] == NO){
        [sender setOn:NO animated:YES];
        // Popup
    }
}

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

طريقة أفضل هي تعطيل التحكم، ولكن ربما هذا ليس ما تريده في هذه الحالة.

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