我想要完成的是构建一个UITableView,其中每个单元格右侧都有一个UISwitch,当用户再次打开应用程序时,交换机将保持在相应索引路径的开/关位置。
我创建了一个布尔数的NSArray并将它们保存到NSUser默认值但是有一些路障,同时循环返回它们以获得正确索引的bool,以将单元格切换开关设置为打开或关闭。
创建具有索引路径属性的自定义单元格会更好吗?那么只需要一个方法将bool保存到索引路径?
我对编程比较陌生,所以我想知道一些更高级的人认为这是最快捷,最简单的方法。
非常感谢!
这是我的布尔控制器,其中save方法是公共的,
#import "BoolController.h"
static NSString *const boolArrayKey = @"boolArrayKey";
@implementation BoolController
+ (BoolController *)sharedInstance {
static BoolController *sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [BoolController new];
});
return sharedInstance;
}
- (void)saveBool:(BOOL)boolean {
NSArray *arrayOfBooleans = [[NSArray alloc]init];
arrayOfBooleans = [arrayOfBooleans arrayByAddingObject:[NSNumber numberWithBool:boolean]];
[[NSUserDefaults standardUserDefaults]setObject:arrayOfBooleans forKey:boolArrayKey];
[[NSUserDefaults standardUserDefaults]synchronize];
}
- (NSArray *)booleans {
return [[NSUserDefaults standardUserDefaults]objectForKey:boolArrayKey];
}
@end
这里是索引路径方法
行的单元格- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
UISwitch *toggleSwitch = [[UISwitch alloc]initWithFrame:CGRectMake(50, 10, 50, 30)];
[cell addSubview:toggleSwitch];
if (toggleSwitch.isOn == YES) {
[[BoolController sharedInstance]saveBool:YES];
}
if (toggleSwitch.isOn == NO) {
[[BoolController sharedInstance]saveBool:NO];
}
return cell;
}
答案 0 :(得分:0)
据我了解你的问题,我得出以下结论:
您应该只获取行的索引路径,并将ON / OFF状态存储在数组的相同索引处。此数组是 MVC 设置中的 MODEL ...
因此,下次创建tableview时,每一行(索引)都会从您的交换机的数组(索引)获得正确的bool!
答案 1 :(得分:0)
MODEL 是真实的。始终使用您在模型中找到的信息创建并刷新视图。如果 VIEW 发生变化 - 让 CONTROLLER 更新模型,反之亦然...... - 并且不时地更新您的用户默认值临时 MODEL 数组的值。因为如果应用程序崩溃或被系统杀死,您需要从用户默认值中读回阵列的模型值。如果它不是最新的,您将获得上次同步的值...
总之,我建议您更多地了解iOS编程中的设计模式。这是每个应用程序的脚手架。没有它,你无论如何都会迷失方向。如果你没有那么多的阅读(这对于一个编程爱好者来说非常糟糕),一定要去 iTunes U ' - >斯坦福大学/保罗哈格蒂
ObjC的2010 - 2014年讲座(有时每年两门课程) Swift的2014年末讲座。
每个季度都有大约18个视频讲座。它们都涵盖相同的主题,只是扩展了添加到iOS的新技术的信息。 全部观看 - 从2010年开始 - 表格视图,例如在头几年得到更好的保障......
这真是一个从绝对新手到(差不多)亲;-)的一个硬核corrida并且很有趣 - 这个人,他的知识和他的讲课方式简直太棒了。
所以 - 足够说话 - 回去工作!
有趣的探索SDK