Cocoa练习01:一个简单的Todo list程序
写一个简单的todo list程序,界面如下图:
在TextField区域输入文字,点击Add按钮会将文字显示在下面的TableView列表中。TableView列表有2列,第一列是文字的输入时间;第二列是文字内容本身。同时TableView的第二列是可以实时手动编辑修改的,修改后自动会修正对应第一列的时间:
1.在AppDelegate类的接口中首先绑定2个outlet和1个action:
- (IBAction)add:(id)sender;
@property (weak) IBOutlet NSTableView *tableView;
@property (weak) IBOutlet NSTextField *textField;
2.绑定TableView的delegate和dataSource为AppDelegate本身:
3.最后代码补全如下:
AppDelegate.h
//
// AppDelegate.h
// TodoList
//
// Created by kinds on 15/6/28.
// Copyright (c) 2015年 hopy. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@interface AppDelegate : NSObject <NSApplicationDelegate>
- (IBAction)add:(id)sender;
@property (weak) IBOutlet NSTableView *tableView;
@property (weak) IBOutlet NSTextField *textField;
@end
AppDelegate.m
//
// AppDelegate.m
// TodoList
//
// Created by kinds on 15/6/28.
// Copyright (c) 2015年 hopy. All rights reserved.
//
#import "AppDelegate.h"
@interface AppDelegate (){
NSMutableArray *todo_list;
//NSMutableDictionary *todo_list_dict;
}
@property (weak) IBOutlet NSWindow *window;
@end
@implementation AppDelegate
-(id)init{
self = [super init];
if(self){
todo_list = [NSMutableArray array];
//todo_list_dict = [NSMutableDictionary dictionary];
}
return self;
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Insert code here to initialize your application
}
- (void)applicationWillTerminate:(NSNotification *)aNotification {
// Insert code here to tear down your application
}
-(id)tableView:(NSTableView *)tv objectValueForTableColumn:(NSTableColumn *)tableColumn
row:(NSInteger)row{
//NSLog(@"%s:%@",__func__,[tableColumn identifier]);
NSString *colID = [tableColumn identifier];
NSDictionary *dict = [todo_list objectAtIndex:row];
return [dict objectForKey:colID];
//return [todo_list objectAtIndex:row];
}
-(void)tableView:(NSTableView*)tv setObjectValue:(id)obj forTableColumn:(NSTableColumn*)tableColumn
row:(NSInteger)row{
NSDictionary *dict = @{@"date":short_now_string(),@"note":obj};
[todo_list replaceObjectAtIndex:row withObject:dict];
[_tableView reloadData];
}
-(NSInteger)numberOfRowsInTableView:(NSTableView *)tv{
return (NSInteger)[todo_list count];
}
NSString* short_now_string(void){
NSDateFormatter *ft = [NSDateFormatter new];
ft.dateFormat = @"Y-M-d H:m:s z";
return [ft stringFromDate:[NSDate new]];
}
- (IBAction)add:(id)sender {
NSString *str = [_textField stringValue];
if([str length] == 0)
return;
//[todo_list addObject:str];
//NSDateFormatter *ft = [NSDateFormatter new];
//ft.dateFormat = @"Y-M-d H:m:s z";
NSDictionary *dict = @{@"date":short_now_string(),@"note":str};
[todo_list addObject:dict];
[_tableView reloadData];
[_textField setStringValue:@""];
}
@end
Cocoa练习01:一个简单的Todo list程序的更多相关文章
- ASP.NET Core Blazor WebAssembly实现一个简单的TODO List
基于blazor实现的一个简单的TODO List 最近看到一些大佬都开始关注blazor,我也想学习一下.做了一个小的demo,todolist,仅是一个小示例,参考此vue项目的实现http:// ...
- 一个简单的MDI示范程序(Delphi)
http://www.cnblogs.com/pchmonster/archive/2012/01/07/2316012.html 最为一个巩固之前有关窗体和对象的有关知识,下面就建立一个简单的MDI ...
- 一个简单的P2P传输程序
写了一个简单的P2P传输程序,在P2P的圈子中传输文件,不过为了简便,这个程序没有真正的传输文件,只是简单的判断一下文件的位置在哪里.这个程序可以处理当有一个peer闪退的情况,在这种情况下,剩下的p ...
- IOS开发之小实例--使用UIImagePickerController创建一个简单的相机应用程序
前言:本篇博文是本人阅读国外的IOS Programming Tutorial的一篇入门文章的学习过程总结,难度不大,因为是入门.主要是入门UIImagePickerController这个控制器,那 ...
- iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序
iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序 一.plist文件和项目结构图 说明:这是一个嵌套模型的示例 二.代码示例: YYcarsgroup.h文件代码: // // YYcar ...
- 一个简单的DDraw应用程序2
//------------------------------------------------------------------------- // 文件名 : 6_1.cpp// 创建者 : ...
- 一个简单的DDraw应用程序
阅读排行榜 1. C/C++ 笔试.面试题目大汇总(72915) 2. [STL]list基础(21718) 3. COM笔记-CoCreateInstance(14842) 4. C/C++ ...
- Linux内核监控模块-1-驱动模块(LKM)开发(以一个简单的hello world程序为例)
在上面一篇中介绍到,监控模块要做成一个驱动模块(或者说是可加载模块,LKM),动态的加载到Linux内核中.那么这篇就简单的介绍一下怎样做一个这样的驱动模块. 以简单的hello world程序为 ...
- C++ 容器的综合应用的一个简单实例——文本查询程序
C++ 容器的综合应用的一个简单实例——文本查询程序 [0. 需求] 最近在粗略学习<C++ Primer 4th>的容器内容,关联容器的章节末尾有个很不错的实例.通过实现一个简单的文本查 ...
随机推荐
- Dynamics CRM 视图显示列的拷贝—view layout replicator
在视图设置的时候很多人会遇到这样的问题,要设置多张视图,而这多张视图可能除了筛选条件不同外其他的均相同,手动去设置是件重复的令人非常头痛的事情,如果能够拷贝那就相当完美了. 本篇即介绍视图显示列的拷贝 ...
- SSH框架实现仿淘宝购物demo
还记得六月份实习的时候,曾经做过一个电商的项目,项目里面需要实现类似淘宝购物车的移动端的demo,随着项目的进行,再一次跟购物车碰面,但是今天呢,不是移动端的需求,如何使用SSH框架实现类似淘宝的购物 ...
- 剑指offer面试题5 从头到尾打印链表(c)
- (一一九)通过CALayer实现阴影、圆角、边框和3D变换
在每个View上都有一个CALayer作为父图层,View的内容作为子层显示,通过layer的contents属性决定了要显示的内容,通过修改过layer的一些属性可以实现一些华丽的效果. [阴影和圆 ...
- 【移动开发】一张图搞定Activity和Fragment的生命周期
- Android初级教程理论知识(第七章服务)
服务两种启动方式 startService:服务被启动之后,跟启动它的组件没有一毛钱关系 bindService:跟启动它的组件同生共死 绑定服务和解绑服务的生命周期方法:onCreate->o ...
- Linux内核基础
Linux系统运行的应用程序通过系统调用来与内核通信.应用程序通常调用库函数(比如C库函数)再有库函数通过系统调用界面,让内核带其完成各种不同的任务. 下面这张图显示的就是应用程序,内 ...
- iOS中 基于LBXScan库二维码扫描 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang 新浪微博 首先声明这个二维码扫描是借助于zxing. 功能模块都完全封装好了,不过界面合你口味,直接使用就好,如果不合口味,后 ...
- Android:ADB server didn't ACK或者adb server is out of date. killing解决办法
欢迎关注公众号,每天推送Android技术文章,二维码如下:(可扫描) 出现这个原因我个人感觉有两个.一.5037端口被别的程序或者进程占用:二.adb占用的不是5037端口.很多人仅仅知道第一种二忽 ...
- gcov 统计 inline 函数
gcov 统计 inline 函数 (金庆的专栏) gcov可以统计 inline 函数,可是实际使用中碰到统计次数总是为0的现象. 假设类A的头文件为 A.h, 实现文件为 A.cpp. A 有几 ...