我创建了UITableView,TableView中的数据从Web服务加载。我在单元格中插入一个复选框。
我想保存已检查单元格的数据。
当我也重新打开应用程序所选复选框保持原样,就像之前一样。
这是我的myTable.m
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cell1=@"aa";
CustomCell *cell=[tableView dequeueReusableCellWithIdentifier:cell1];
if (cell==nil) {
cell=[[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cell1];
NSArray *cellArray=[[NSBundle mainBundle]loadNibNamed:@"CustomCell" owner:nil options:nil];
for (UIView *view in cellArray) {
if([view isKindOfClass:[CustomCell class]])
{
cell = (CustomCell*)view;
}
}
}
//cell.textLabel.text=[array objectAtIndex:indexPath.row];
cell.labelcell.text=[array objectAtIndex:indexPath.row];
return cell;
}
CustomCell.h
#import <UIKit/UIKit.h>
@interface CustomCell : UITableViewCell{
BOOL isSelected;
}
@property (strong, nonatomic) IBOutlet UILabel *labelcell;
@property (strong, nonatomic) IBOutlet UIButton *checkButton;
- (IBAction)checkboxAction:(id)sender;
@end
CustomCell.m
- (IBAction)checkboxAction:(id)sender {
NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
if(!isSelected){
[checkButton setImage:[UIImage imageNamed:@"checked.png"]
forState:UIControlStateNormal];
isSelected = YES;
[defaults setBool:isSelected forKey:@"boxIsChecked"];
}
else if (isSelected){
[checkButton setImage:[UIImage imageNamed:@"empty-check.png"]
forState:UIControlStateNormal];
isSelected = NO;
[defaults setBool:isSelected forKey:@"boxIsChecked"];
}
[defaults synchronize];
}
-(void)checkTheBox{
if(!isSelected){
[checkButton setImage:[UIImage imageNamed:@"empty-check.png"]
forState:UIControlStateNormal];
}
else if (isSelected){
[checkButton setImage:[UIImage imageNamed:@"checked.png"]
forState:UIControlStateNormal];
}
}
我尝试使用NSUserDefaults但它正在申请表中的总行数。我想申请个别行,也想保存该行数据。 任何人都可以帮助我。
答案 0 :(得分:0)
答案 1 :(得分:0)
如果您想使用用户默认值实现@Chandan,那么
#import "ViewController.h"
#import "CustomTableViewCell.h"
NSString* cellIdentifier = @"CellIdentifier";
@interface ViewController ()<UITableViewDataSource, UITableViewDelegate>
{
UITableView *_tableView;
NSMutableArray *_dataSource;
NSMutableArray *_checkBoxSelectionArray;
}
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
_tableView = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStylePlain];
_tableView.delegate = self;
_tableView.dataSource = self;
[_tableView registerNib:[UINib nibWithNibName:@"CustomTableViewCell" bundle:nil] forCellReuseIdentifier:cellIdentifier];
[self.view addSubview:_tableView];
_checkBoxSelectionArray = [[NSMutableArray alloc] init];
_dataSource = [[NSMutableArray alloc] init];
for (int i = 0; i < 20; i++) {
[_dataSource addObject:[NSString stringWithFormat:@"Cell [%d]", i]];
}
}
- (NSInteger)numberOfSectionsInTableView:(UITableView*)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section
{
//user defaults
NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
NSMutableArray* array = [userDefaults objectForKey:@"checkedStatusArray"];
if (!array) {
NSMutableArray* mutArray = [[NSMutableArray alloc] init];
for (int i = 0; i < _dataSource.count; i++) {
NSMutableDictionary* checkedDict = [[NSMutableDictionary alloc] init];
[checkedDict setObject:[NSNumber numberWithBool:NO] forKey:@"checkBoxStatus"];
[mutArray addObject:checkedDict];
}
[userDefaults setObject:mutArray forKey:@"checkedStatusArray"];
}
else {
for (int i = 0; i < _dataSource.count - array.count; i++) {
NSMutableDictionary* checkedDict = [[NSMutableDictionary alloc] init];
[checkedDict setObject:[NSNumber numberWithBool:NO] forKey:@"checkBoxStatus"];
[array addObject:checkedDict];
}
[userDefaults setObject:array forKey:@"checkedStatusArray"];
}
[userDefaults synchronize];
return _dataSource.count;
}
- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
CustomTableViewCell* customCell = (CustomTableViewCell*)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (customCell == nil) {
customCell = [[CustomTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
customCell.cellLable.text = [_dataSource objectAtIndex:indexPath.row];
[customCell.cellCheckBox addTarget:self action:@selector(whenCheckBoxTapped:) forControlEvents:UIControlEventTouchUpInside];
//user defaults
NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
NSMutableArray* userDefaultsArray = [userDefaults objectForKey:@"checkedStatusArray"];
NSMutableDictionary* checkedDict = [userDefaultsArray objectAtIndex:indexPath.row];
if ([[checkedDict objectForKey:@"checkBoxStatus"] boolValue]) {
[customCell.cellCheckBox setBackgroundImage:[UIImage imageNamed:@"radio_checked"] forState:UIControlStateNormal];
}
else {
[customCell.cellCheckBox setBackgroundImage:[UIImage imageNamed:@"radio_unchecked"] forState:UIControlStateNormal];
}
return customCell;
}
- (void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath
{
[self selectedTableViewCellOrCheckBox:indexPath.row];
}
-(void)whenCheckBoxTapped:(id)sender{
NSIndexPath *indexPath = [_tableView indexPathForCell:[self returnTableViewCellFromSuperViewHierarchyForView:sender]];
[self selectedTableViewCellOrCheckBox:indexPath.row];
}
-(UITableViewCell *)returnTableViewCellFromSuperViewHierarchyForView:(UIView *)aView
{
while (aView.superview != nil) {
aView = aView.superview;
if ([aView isKindOfClass:[UITableViewCell class]]) {
return (UITableViewCell *)aView;
}
}
return nil;
}
-(void)selectedTableViewCellOrCheckBox:(int) index{
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:index inSection:0];
CustomTableViewCell* selectedCell = (CustomTableViewCell*)[_tableView cellForRowAtIndexPath:indexPath];
[selectedCell.cellCheckBox setBackgroundImage:[UIImage imageNamed:@"radio_checked"] forState:UIControlStateNormal];
NSLog(@"%d", [selectedCell.cellCheckBox isSelected]);
//user defaults
NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
NSMutableArray* userDefaultsArray = [userDefaults objectForKey:@"checkedStatusArray"];
NSMutableDictionary* checkedDict = [userDefaultsArray objectAtIndex:indexPath.row];
if ([[checkedDict objectForKey:@"checkBoxStatus"] boolValue]) {
[checkedDict setObject:[NSNumber numberWithBool:NO] forKey:@"checkBoxStatus"];
[selectedCell.cellCheckBox setBackgroundImage:[UIImage imageNamed:@"radio_unchecked"] forState:UIControlStateNormal];
}
else {
[checkedDict setObject:[NSNumber numberWithBool:YES] forKey:@"checkBoxStatus"];
[selectedCell.cellCheckBox setBackgroundImage:[UIImage imageNamed:@"radio_checked"] forState:UIControlStateNormal];
}
[userDefaultsArray replaceObjectAtIndex:indexPath.row withObject:checkedDict];
[userDefaults setObject:userDefaultsArray forKey:@"checkedStatusArray"];
[userDefaults synchronize];
}
@end
答案 2 :(得分:-1)
@Chandan ..
在IOS中有4种方法可以保存数据
1. SqLite Database
2. Plist
3. User Defaults
4. Core Data
保存在UserDefault中,您可以像这样直接保存数据。 实施例。
//保存Bool值
[Userdefaults setBool:NO forKey:"isUserLogin"];
[Userdefaults synchronize];
//获得Bool值
BOOL islogin=[Userdefaults boolForKey:isUserLogin];
//保存对象
[Userdefaults setObject:[response valueForKey:APPKEY] forKey:APPKEY];
[Userdefaults synchronize];
//获取对象
NSDictionary *postParameter=[NSDictionary dictionaryWithObjectsAndKeys:[Userdefaults objectForKey:"Lat"],@"vLatitude",[Userdefaults objectForKey:"Lon"],@"vLongitude",nil];
&安培;另一种节省数据的最佳方法是使用SqLite数据库...
更多信息点击链接:http://mehul4ever.blogspot.in/2014/12/ios-sqlite-database-insert-update-delete.html
我已解释所有插入,更新和放大从DataBase&amp;删除数据将其显示在表格中或设备中的任何位置。