IOS 日记app的制作过程(Objective-C)
来源:互联网 发布:蓝莲花网络 编辑:程序博客网 时间:2024/05/21 01:48
1.框架
我使用Realm来作为数据库的框架,还有SDAutoLayout做适配。不会用的,也没关系,这两个框架简单的很。
2.逻辑设置
日记记录的时候就记录三个数据,标题,内容,写日记的时间。这个时间精确到秒,相当于数据库的主键。我们点击以前写的日记项,也可以对其进行修改,这个时间也会修改。
3.界面设置
我先贴两个图片大家理解一下就好,反正用的控件不多
主界面一个列表心事所有日记的信息,和一个添加按钮跳转写日记的界面
写日记的界面,两个TextView作为主体,三个按钮分别承当保存,取消,删除的功能
,这个删除的按钮只会在通过点击一个日记的信息列表项进入到这个界面才会显示。
4.主体逻辑代码
主界面的逻辑代码
//// MainViewController.m// Note//// Created by shanreal-iOS on 2017/12/15.// Copyright © 2017年 shanreal.LongZhenHao. All rights reserved.//#import "MainViewController.h"#import "MainView.h"#import "MainModel.h"#import "MainTableViewCell.h"#import "DetailViewController.h"#import "NoteBean.h"@interface MainViewController ()<UITableViewDelegate,UITableViewDataSource>@property(nonatomic,strong)MainView* mainview;@property(nonatomic,strong)MainModel* model;@property(nonatomic,strong)NSMutableArray *dataArray;@end@implementation MainViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.navigationController.navigationBar.hidden=YES; self.navigationController.navigationBar.barStyle=UIBarStyleBlack; self.mainview = [[MainView alloc]initWithFrame:self.view.frame]; [self.mainview viewInit]; [self.mainview.tableview_main setSeparatorStyle:UITableViewCellSeparatorStyleNone]; self.mainview.tableview_main.bounces=NO; self.mainview.tableview_main.delegate=self; self.mainview.tableview_main.dataSource=self; [self.mainview.btn_add addTarget:self action:@selector(addAction) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:self.mainview]; /* RLMResults *delete = [NoteBean allObjects]; RLMRealm *realm = [RLMRealm defaultRealm]; [realm transactionWithBlock:^{ for (NoteBean *bean in delete) { [realm deleteObject:bean]; } }]; */ NSString* a =[TimeStampUtil getCurrentTimeStemp]; NSLog(a);}-(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; self.dataArray = [NSMutableArray new]; RLMResults *data = [[NoteBean allObjects] sortedResultsUsingKeyPath:@"date" ascending:NO]; [[RLMRealm defaultRealm] transactionWithBlock:^{ for (NoteBean *bean in data) { [self.dataArray addObject:bean]; } }]; [self.mainview.tableview_main reloadData]; NSLog(@"%d",self.dataArray.count);}-(void)addAction{ DetailViewController* vc = [[DetailViewController alloc]init]; vc.sort = 0; [self.navigationController pushViewController:vc animated:YES];}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}#pragma mark - UITableViewDataSource- (NSInteger)numberOfSectionsInTableView:(UITableView *)theTableView{ return 1;}- (NSInteger)tableView:(UITableView *)theTableView numberOfRowsInSection:(NSInteger)section{ return self.dataArray.count;}- (UITableViewCell *)tableView:(UITableView *)theTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ NSString *cellIdentifier = [NSString stringWithFormat:@"MainTableViewCell%ld%ld", [indexPath section], [indexPath row]]; MainTableViewCell *cell = (MainTableViewCell *)[theTableView dequeueReusableCellWithIdentifier:cellIdentifier]; if (cell == nil) { cell = [[MainTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; } NoteBean* bean = self.dataArray[indexPath.row]; cell.label_title.text = bean.title; cell.label_date.text = bean.date; return cell;}-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ return 50*MY;}#pragma mark - UITableViewDelegate- (void)tableView:(UITableView *)theTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ [theTableView deselectRowAtIndexPath:indexPath animated:YES]; NSLog(@"selected %ld row", indexPath.row); DetailViewController* vc = [[DetailViewController alloc]init]; vc.sort = 1; vc.date = ((NoteBean*)self.dataArray[indexPath.row]).date; vc.title = ((NoteBean*)self.dataArray[indexPath.row]).title; vc.content = ((NoteBean*)self.dataArray[indexPath.row]).content; [self.navigationController pushViewController:vc animated:YES];}@end
写日期的界面的逻辑代码
#import <UIKit/UIKit.h>#import "DetailView.h"#import "DetailModel.h"#import "NoteBean.h"@interface DetailViewController : UIViewController@property(nonatomic,assign)int sort;@property(nonatomic,strong)NSString* date;@property(nonatomic,strong)NSString* title;@property(nonatomic,strong)NSString* content;@end//// DetailViewController.m// Note//// Created by shanreal-iOS on 2017/12/15.// Copyright © 2017年 shanreal.LongZhenHao. All rights reserved.//#import "DetailViewController.h"@interface DetailViewController ()@property(nonatomic,strong)DetailView* detailview;@end@implementation DetailViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.navigationController.navigationBar.hidden=YES; self.navigationController.navigationBar.barStyle=UIBarStyleBlack; self.detailview = [[DetailView alloc]initWithFrame:self.view.frame]; [self.detailview viewInit]; [self.detailview.btn_save addTarget:self action:@selector(saveAction) forControlEvents:UIControlEventTouchUpInside]; [self.detailview.btn_back addTarget:self action:@selector(cancelAction) forControlEvents:UIControlEventTouchUpInside]; [self.detailview.btn_delete addTarget:self action:@selector(deleteAction) forControlEvents:UIControlEventTouchUpInside]; self.detailview.tf_title.text = self.title; self.detailview.tv_content.text = self.content; [self.view addSubview:self.detailview]; if(self.sort == 1) self.detailview.btn_delete.hidden = NO;}-(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated];}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}-(void)deleteAction{ NSLog(@"delete"); NSPredicate *pred = [NSPredicate predicateWithFormat:@"date = %@", self.date]; RLMResults<NoteBean *> *beans = [NoteBean objectsWithPredicate:pred]; RLMRealm *realm = [RLMRealm defaultRealm]; [realm transactionWithBlock:^{ NoteBean *bean = [beans objectAtIndex:0]; [realm deleteObject:bean]; }]; [ShowToastView showToastView:self.view WithMessage:@"删除成功"]; [self performSelector:@selector(cancelAction) withObject:nil afterDelay:2];}-(void)saveAction{ NSString* title = self.detailview.tf_title.text; NSString* content = self.detailview.tv_content.text; if([title isEqualToString:@""]||title==NULL){ [ShowToastView showToastView:self.view WithMessage:@"标题没写"]; return ; } if([content isEqualToString:@""]||content==NULL){ [ShowToastView showToastView:self.view WithMessage:@"内容没写"]; return ; } NSLog(@"save %@ %@",title,content); if(self.sort == 0){ NoteBean* bean = [[NoteBean alloc]init]; bean.date = [TimeStampUtil getCurrentTimeStemp]; bean.title = self.detailview.tf_title.text; bean.content = self.detailview.tv_content.text; RLMRealm *realm = [RLMRealm defaultRealm]; [realm transactionWithBlock:^{ [realm addObject:bean]; }]; [ShowToastView showToastView:self.view WithMessage:@"保存成功"]; }else if(self.sort == 1){ NSPredicate *pred = [NSPredicate predicateWithFormat:@"date = %@", self.date]; RLMResults<NoteBean *> *beans = [NoteBean objectsWithPredicate:pred]; [[RLMRealm defaultRealm] transactionWithBlock:^{ NoteBean *bean = [beans objectAtIndex:0]; bean.date = [TimeStampUtil getCurrentTimeStemp]; bean.title = self.detailview.tf_title.text; bean.content = self.detailview.tv_content.text; }]; [ShowToastView showToastView:self.view WithMessage:@"修改成功"]; } [self performSelector:@selector(cancelAction) withObject:nil afterDelay:2];}-(void)cancelAction{ NSLog(@"cancel"); [self.navigationController popViewControllerAnimated:YES];}@end
最后我奉上源代码地址
http://download.csdn.net/download/z979451341/10163474
阅读全文
0 0
- IOS 日记app的制作过程(Objective-C)
- iOS开发入门教程之Objective-C · 面向过程的Objective-C
- ios objective c 的基本知识
- iOS App 的编译过程
- Objective-C-iOS AppDelegate代理详解(启动,打开App,推送,通知)
- 在iOS app中运行Python文件(Swift+Objective C+Python)
- ios学习一:objective-c面向对象的一些术语(来源objective-c基础编程)
- IOS开发(38)之Objective-c的@property 详解
- iOS学习(三)Objective-C 类的声明
- iOS学习(四)Objective-C 类的实现
- iOS学习(五)Objective-C 类的实例化
- iOS学习(六)Objective-C 对象的初始化
- iOS学习(十三)Objective-C 常见的内存错误
- iOS学习(十五)Objective-C 方法的覆盖
- iOS学习(十八)Objective-C 多态的基本概念
- iOS学习(十九)Objective-C id的类型
- Objective-C-如何监测键盘的高度(iOS)
- iOS/Objective-C开发 枚举(Enum)的使用
- 第三周2
- 使用IDEA将项目打成Jar包
- SSD Advisory – Huawei P8 wkupccpu debugfs Kernel Buffer Overflow
- Android版本更新下载提示对话框
- SpringBoot整合RabbitMQ实现微服务间的异步消息沟通
- IOS 日记app的制作过程(Objective-C)
- 深度学习—随机梯度下降(SGD)
- datagrid数据表格向后台传递接收
- Coding如何生成SSH公匙密匙?
- 《道德经译本》
- Matrix4x4
- lnmp搭建(Nginx1.12.1;mysql5.7.20;php7.2.0)
- Unsupported Media Type,status 415
- AOP+log4j记录日志