在实际生活中,由于事情太多太杂,我们往往会忘记一些事情。该应用就是基于这样的用户痛点而开发的任务列表。类似iOS自带的备忘录程序。你可以随时记录一些信息,并可以实时的进行保存。在程序重新打开时会显示你保存的所有信息。该Demo我已经上传 https://github.com/chenyufeng1991/iOS-TaskList 。
该应用主要实现的技术就是iOS控件UITableView的使用和CoreData进行存储。TableView类似Android中的ListView,可以列表显示信息,并自动增加行数。而CoreData是iOS对SQLite嵌入式数据库的封装,可以极为方便的进行数据的增删改查。我们通过代码来实现一下:
(1)由于我需要使用CoreData来存储数据,所以在一开始创建项目的时候需要勾选Use CoreData那个复选框。项目名称为TaskList.
(2)在创建完项目后,打开TaskList.xcdatamodeld文件,进行CoreData的数据结构设计。点击下方的Add Entity按钮,增加一个实例——Task。然后在右侧增加一个属性taskname,类型为String.因为在对于每一个任务,我们暂时只存储它的任务名称即可。
。
(3)在界面中增加一个任务名称输入框,一个增加按钮,一个TableView即可。在使用segue进行代码绑定后,在ViewController中实现如下:
#import "ViewController.h" #import "AppDelegate.h" #import <CoreData/CoreData.h> @interface ViewController ()<UITableViewDataSource,UITableViewDelegate,UIScrollViewDelegate> @property (weak, nonatomic) IBOutlet UITextField *inputTextField; @property (weak, nonatomic) IBOutlet UITableView *taskTableView; @property(strong,nonatomic) NSMutableArray *taskArray; @property(strong,nonatomic) NSArray *arr; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //应用启动的时候加载数据库文件; NSManagedObjectContext *context = [(AppDelegate*)[[UIApplication sharedApplication] delegate] managedObjectContext]; NSFetchRequest *fetchData = [[NSFetchRequest alloc] initWithEntityName:@"Task"]; self.arr = [context executeFetchRequest:fetchData error:nil]; self.taskArray = [[NSMutableArray alloc] initWithArray:[self.arr valueForKey:@"taskname"]]; } #pragma mark - UITableViewDataSource //每一个section有几个cell; - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return self.taskArray.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyCell" forIndexPath:indexPath]; cell.textLabel.text = [self.taskArray objectAtIndex:indexPath.row]; return cell; } #pragma mark - 点击增加按钮 - (IBAction)addTaskButtonClick:(id)sender { NSString *inputStr = [[NSMutableString alloc] initWithFormat:@"%@",self.inputTextField.text]; inputStr = [inputStr stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; //判断如果输入的为空,则不添加; if ([inputStr isEqual: @""]) { UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"输入的内容不能为空" preferredStyle:UIAlertControllerStyleAlert]; [alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:nil]]; [self presentViewController:alert animated:true completion:nil]; } else { //每点击一次“确定”按钮后,就把该数据存储到CoreData中; [self saveToCoreData:inputStr]; //把一个文本存储到taskArray数组中; [self.taskArray insertObject:self.inputTextField.text atIndex:self.taskArray.count]; [self.taskTableView reloadData]; //清空输入框; self.inputTextField.text = nil; //点击确定后消失软键盘; [self.inputTextField resignFirstResponder]; } } #pragma mark - 保存数据到CoreData; - (void) saveToCoreData:(NSString *)taskName{ NSManagedObjectContext *context = [(AppDelegate*)[[UIApplication sharedApplication] delegate] managedObjectContext]; NSManagedObject *row = [NSEntityDescription insertNewObjectForEntityForName:@"Task" inManagedObjectContext:context]; [row setValue:taskName forKey:@"taskname"]; [context save:nil]; NSLog(@"已保存到数据库"); } #pragma mark - UIScrollViewDelegate //滚动TableView的时候隐藏软键盘; - (void)scrollViewDidScroll:(UIScrollView *)scrollView{ [self.inputTextField resignFirstResponder]; } @end
最后的实现效果如下:
。
。
github主页:https://github.com/chenyufeng1991 。欢迎大家访问!
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-22 20:00:01