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