UISWITCH داخل مخصص القديم غير متوفر
-
19-09-2019 - |
سؤال
انا املك UISwitch
داخل مخصص UITableViewCell
(الفرعية التي أسميها RootLabeledSwitchTableCell
).
تحتوي الخلية على UILabel
و UISwitch
بجانب بعضهما.
انا املك @property
مسمى keychainSwitch
هذا يشير إلى التبديل داخل هذه الخلية المخصصة:
@interface RootLabeledSwitchTableCell : UITableViewCell {
IBOutlet UILabel *textLabel;
IBOutlet UISwitch *labeledSwitch;
}
@property (nonatomic, retain) IBOutlet UILabel *textLabel;
@property (nonatomic, retain) IBOutlet UISwitch *labeledSwitch;
@end
في موضح الجدول الخاص بي، أضفت محددا يسمى إذا تم قلب حالة التبديل:
- (UITableViewCell *) tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *CellIdentifier = [NSString stringWithFormat: @"%d:%d", [indexPath indexAtPosition:0], [indexPath indexAtPosition:1]];
UITableViewCell *cell = [tv dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
switch (indexPath.section) {
case(kMyFirstSection): {
switch (indexPath.row) {
case(kMyFirstSectionFirstRow) {
[cellOwner loadMyNibFile:@"RootLabeledSwitchTableCell"];
cell = (RootLabeledSwitchTableCell *)cellOwner.cell;
self.keychainSwitch = [(RootLabeledSwitchTableCell *)cell labeledSwitch];
[self.keychainSwitch addTarget:self action:@selector(keychainOptionSwitched) forControlEvents:UIControlEventValueChanged];
break;
}
// ...
}
}
// ...
}
}
حتى يعمل هذا المحدد بشكل صحيح:
- (void) keychainOptionSwitched {
NSLog(@"Switched keychain option from %d to %d", ![self.keychainSwitch isOn], [self.keychainSwitch isOn]);
}
ومع ذلك، لا أستطيع استخدام UISwitch
مثال -setOn:animated:
طريقة لتهيئة حالتها الأولية:
- (void) updateInterfaceState {
BOOL isFirstTimeRun = [[[NSUserDefaults standardUserDefaults] objectForKey:kIsFirstTimeRunKey] boolValue];
if (isFirstTimeRun) {
[self.keychainSwitch setOn:NO animated:NO];
}
}
من الاختبار، self.keychainSwitch
يكون nil
وهو ما يسبب -setOn:animated
لا تفعل شيئا، ولكن لا يزال بإمكاني تشغيل التبديل و NSLog
سيقوم البيان بطباعة تغييرات الحالة التبديل بشكل صحيح، على سبيل المثال:
[Session started at 2009-08-24 07:04:56 -0700.]
2009-08-24 07:04:58.489 MyApp[29868:20b] keychain switch is: nil
2009-08-24 07:05:00.641 MyApp[29868:20b] Switched keychain option from 1 to 0
2009-08-24 07:05:01.536 MyApp[29868:20b] Switched keychain option from 0 to 1
2009-08-24 07:05:02.928 MyApp[29868:20b] Switched keychain option from 1 to 0
هل هناك شيء أفتقده حول الإعداد self.keychainSwitch
في ال UITableView
طريقة المندوب؟
المحلول
فعلت هذا منذ فترة. يجب عليك تغيير Selctor الخاص بك
[self.keychainSwitch addTarget:self action:@selector(keychainOptionSwitched:) forControlEvents:UIControlEventValueChanged];
ثم قم بتحديث طريقتك ل
-(void) keychainOptionSwitched:(id)sender {
UISwitch *tempSwitch = (UISwitch *)sender;
}
الآن Tempswitch هو التبديل الذي تم تغييره.
نصائح أخرى
لقد أمضيت الأعمار في الاضطرابات حولها مع Custom ApieTriViewCells مع تسمية بسيطة والتبديل عليها قبل اكتشافها أضف UISWitch كمنظر ملحق. وبعد من المحتمل أنك تدرك هذا على أي حال، وتريد الخلية المخصصة لأسباب أخرى، ولكن فقط في حالة أرادت أن أذكر هذا!
يمكنك القيام بذلك على النحو التالي (في طريقة -TableView: CellFOVERONIDENDEXPATH):
UISwitch *mySwitch = [[[UISwitch alloc] initWithFrame:CGRectZero] autorelease];
cell.accessoryView = mySwitch;
يعتني بت الوصول إلى التحجيم وتحديد المواقع حتى نتمكن من الابتعاد مع CGrectzero.
بعد ذلك، يمكنك بعد ذلك استخدام حدث التحكم في النظام وطريقة Seton كما يلي (ملاحظة أننا نطبق عليه كمؤشر UISWitch الذي نعرفه هو):
[(UISwitch *)cell.accessoryView setOn:YES]; // Or NO, obviously!
[(UISwitch *)cell.accessoryView addTarget:self action:@selector(mySelector)
forControlEvents:UIControlEventValueChanged];
امل ان يساعد!
أعتقد أن ما يحدث هنا هو أنك تحاول استدعاء العملية عندما تكون الخلية خارج الرأي، لذلك ما يحدث هو أن الخلية تفريغها في ذلك الوقت، وبالتالي فإنك تحصل على Nil لمفتاح المفاتيح، بمجرد أن يأتي إلى عرض ثم لم يعد لا شيء منذ إعادة تحميلها. لكنني أرى أنك تقوم بتعيين التبديل مثل
self.keychainSwitch = [(RootLabeledSwitchTableCell *)cell labeledSwitch];
في الإشارة إلى التبديل في خلية الجدول وأنت لا تحتفظ به، لذلك يجعل ذلك لأن التبديل أصبح نظرا لأنه عندما تنفد الخلية بعيدا، أصبحت Keychainswitch أصبحت نيل نتيجة لذلك وبالتالي فئتها أصبح العضو نيل كذلك. قد ترغب في الاحتفاظ بالبحث عن Keychainswitch ثم عند إعادة بناء الجدول C ELL، احصل على التبديل من Keychainswitch، أو شيء من هذا النوع. أتمنى أن يساعدك هذا