سؤال

في محاولة لا تنتهي أبدا لمعرفة المزيد حول تطوير iPhone، كنت ألعب مع بعض التعليمات البرمجية المصدر المتاحة من خلال موقع مطور التفاح. المثال الخاص أنا أعمل مع هو كتب البيانات الأساسية، وجدت هنا. وبعد يتم إجراء DetailViewController، ويتم تشغيل الوظيفة الإضافية بشكل طبيعي، لأنه لا توجد ملفات XIB لهم. سؤالي هو إضافة الأشياء برمجيا إلى طريقة عرض دون استخدام IB. أريد أن أضع UISWITCH أسفل ApableView التي لديها معلومات مفصلة حول كتاب معين في DetailView. كيف أقوم بهذا العمل؟ هذا ما جربته حتى الآن:

في AddViewController، أقوم بإعداد UISWitch:

@interface AddViewController : DetailViewController {
id <AddViewControllerDelegate> delegate;
UISwitch *onoff;

 }

@property (nonatomic, assign) id <AddViewControllerDelegate> delegate;
@property (nonatomic, retain) IBOutlet UISwitch *onoff;

أنا أيضا إعداد iBaction:

- (IBAction)flip:(id)sender;

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

تحرير 1.

لذلك قمت بتنفيذ التعليمات البرمجية كما تم توجيهي في تحميل ViewDidID، مثل ذلك:

   - (void)viewDidLoad {

[super viewDidLoad];    
  UISwitch *onoff = [[UISwitch alloc] initWithFrame: CGRectZero];
[onoff addTarget: self action: @selector(flip:) forControlEvents:UIControlEventValueChanged];
// Set the desired frame location of onoff here
[self.view addSubview: onoff];

ويطرح تحذيرين يقولان إن الإعلان المحلي "Onoff" يخفي متغير المثيل. ولكن على الرغم من وجود هذه الأرباح، إلا أن UISWITCH ينبثق على ما يرام، ولكن عندما أحركها، أو استخدمها، فهي لا تبدو وكأنها تعمل بشكل كامل. لعملي الذي يشبه هذا:

- (IBAction)flip:(id)sender {
if (onoff.on) NSLog(@"On");  
else  NSLog(@"Off");  
 }

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

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

المحلول

المحول البرمجي يحاول مساعدتك. أنت تتجاوز متغير مثيل Off viewDidLoad; وبالتالي، هذا لا يحصل أبدا. في -flip: الطريقة، أنت تشير إلى وحدة تحكم NIL. هناك طريقتان لحل هذه المشكلة:

(أ) التخلص من الإعلان المحلي الموضعي، واستخدام متغير مثيل الخاص بك

(ب) يلقي حجة المرسل إلى -flip: ك UISwitch, والوصول إلى ذلك:

- (IBAction) flip: (id) sender {
    UISwitch *onoff = (UISwitch *) sender;
    NSLog(@"%@", onoff.on ? @"On" : @"Off");
}

نصائح أخرى

ستيف، أنا آسف إذا أسيء فهم سؤالك. هل قمت بالفعل بإنشاء UISwitch وإضافته إلى التسلسل الهرمي الرأي؟ جهاز التحكم الخاص بك -loadView أو -viewDidLoad يجب أن يحتوي التنفيذ على رمز مثل ما يلي:

// Use the ivar here
onoff = [[UISwitch alloc] initWithFrame: CGRectZero];
[onoff addTarget: self action: @selector(flip:) forControlEvents: UIControlEventValueChanged];
// Set the desired frame location of onoff here
[self.view addSubview: onoff];
[onoff release];
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top