TodoList例子笔记

A、B viewcontroller之间前进后退:
A->B 右键拖动A的一个button到B上即可
	在A中重写prepareForSegue可以在跳转的时候被调用到
	[segue destinationViewController]
B退回到A:
	在A中写个unwind函数,当然函数名要清晰,例如unwindB之类的
	-(IBAction)unwindB:(UIStoryboardSeuge *)segue;
	同时在m文件中实现。BViewController *bViewController = [segue sourceViewController]
	然后右键拖动B中的一个button到B上的Exit,选择unwindB.

	注意这个unwind方法要写在A中。


技巧:
	你可以在prepareForSegue和unwind之间设置要传递的数据,指定给destinationViewController,sourceViewController


代码实现点击按钮从A界面跳到另外一个界面
	从lib中拖一个view controller到storyboard中,设置Storyboard ID "PopUp"
	新建PopUpViewController类并制定给它

	界面A中设置关联 :
		- (IBAction)popUp:(id)sender
		{
		//    PopUpViewController *popup = [[PopUpViewController alloc]init]; //如果直接用这样初始化则跳转过去时黑屏~!
		    PopUpViewController *popup = [self.storyboard instantiateViewControllerWithIdentifier:@"PopUp"];
		    
		    popup.delegate = self; // 制定委托

		    //这样相当于push segue,下面相当于modal segua
		//    [self.navigationController pushViewController:popup animated:YES];
		    
		    [self presentViewController:popup animated:YES completion:nil];
		}

		// 这个方法在A中调用,看上面函数中制定delegate = self;
		// 当在目标界面中点击了退出按钮,及可以调用 [self.delegate didPopUp];
		// 这样就只调用了委托的方法,其他事情一概不管
		-(void)didPopUp
		{
			// 可以在这边做一些需要做的处理,而不是放在目标界面的按钮点击事件中
		    [self dismissViewControllerAnimated:NO completion:nil];
		}

删除tableview的单元格
	-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
	{
	    if (editingStyle == UITableViewCellEditingStyleDelete) {
	        NSArray *items = [[TodoListStore sharedStore] allItems];
	        NSString *item = items[indexPath.row];
	        [[TodoListStore sharedStore] removeItem:item];
	#warning compare reloaddata and
	//        [self.tableView reloadData];
	        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
	    }
	}

设置viewtable 编辑状态
	- (IBAction)onToggleEditting:(id)sender
	{
	    if (self.isEditing) {
	        [self.toggleButton setTitle:NORMAL_TITLE];
	        [self setEditing:NO animated:YES];
	    }else{
	        [self.toggleButton setTitle:EDITTING_TITLE];
	        [self setEditing:YES animated:YES];
	    }
	}

读取存档设置标记状态
	- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
	    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ItemCell" forIndexPath:indexPath];
	    
	    // Configure the cell...
	    UILabel *label = (UILabel *)[cell viewWithTag:100];
	    ToDoItem *item = [[TodoListStore sharedStore] allItems][indexPath.row];
	    label.text = item.name;
	    if ([item.completed isEqual: @1]) {
	        cell.accessoryType = UITableViewCellAccessoryCheckmark;
	    }
	    return cell;
	}

NSUserDefault存储
http://blog.youkuaiyun.com/chyroger/article/details/5785297
	1.NSUserDefaults只支持: NSString, NSNumber, NSDate, NSArray, NSDictionary.
		NSString *string = [NSString stringWithString @"hahaha"];  
		NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];  
		[ud setObject:string forKey:@"myKey"];  
		NSString *value;  
		value = [ud objectForKey:"myKey"]; 

	2.如果是其他的,比如你自定义了一个类,标记了todoList的name和completed状态
		-(void)loadData
		{
		    NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
		//    NSMutableArray *arr = [userDefault objectForKey:STORE_KEY];
		    NSData *data = [userDefault objectForKey:STORE_KEY];
		    if (data) {
		        privateItems = [NSKeyedUnarchiver unarchiveObjectWithData:data];
		    }
		}

		-(void)storeData
		{
		    NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
		//    [userDefault setObject:privateItems forKey:STORE_KEY];
		    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:privateItems];
		    [userDefault setObject:data forKey:STORE_KEY];
		    [userDefault synchronize];
		}


		////////说明:privateItems存储了TodoItem
		#import <Foundation/Foundation.h>

		@interface ToDoItem : NSObject <NSCoding>  // 注意实现协议NSCoding

		@property (retain,nonatomic) NSString *name;

		@property (strong,nonatomic) NSNumber *completed;

		@end
//------------------------------------
		#import "ToDoItem.h"

		@implementation ToDoItem
		{
		}

		// 一下两个函数确保在privateItems中能被正确的解析与包装
		-(id)initWithCoder:(NSCoder *)aDecoder
		{
		    if (self = [super init]) {
		        self.completed = [aDecoder decodeObjectForKey:@"_completed"];
		        self.name = [aDecoder decodeObjectForKey:@"_name"];
		    }
		    return self;
		}

		-(void)encodeWithCoder:(NSCoder *)aCoder
		{
		    [aCoder encodeObject:self.completed forKey:@"_completed"];
		    [aCoder encodeObject:self.name forKey:@"_name"];
		}

		@end

输入框获取焦点:
	[self.item becomeFirstResponder];

icon和launch screen
	设置使用默认的icon。引用一张名为icon.png的图片到工程目录即可。
	launch screen可以在对应的xib设置image View
	尺寸应该都有几种模式,@2x



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值