标签:ios objective-c 备忘录 tableview
在实际生活中,由于事情太多太杂,我们往往会忘记一些事情。该应用就是基于这样的用户痛点而开发的任务列表。类似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 。欢迎大家访问!
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:ios objective-c 备忘录 tableview
原文地址:http://blog.csdn.net/chenyufeng1991/article/details/49763713