GeekBand:IOS实战第二周

Navigation的局限:

navigation管理segue是由栈管理,但是遇到同等重要和常用的功能时,用nacigation就无法管理
navigationControllerItem 标题和图片只能显示一个,UITableBarControllerItem 即能显示title也能显示image

Navigation的优点:

减少重复工作,统一风格
系统帮你生成一系列控制
结构

页面之间的传值

一个极为重要的method,它就是: prepareForSegue:sender:
这个method 的完整表达式为: - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
第一个参数是 segue, 第二个参数是 sender。
这里给出一段代码实例,展示了这个method 的常用方法。 这段code 写在当前的ViewController 对应的.m 文件中。
这个method 主要解决2个问题:
(1) 获取所要跳转到的视图控制器 (ViewController);
(2) 同时,将上一个视图的数据,传递给下一个视图。 (比如: 上一个视图是TableView, 那么,就要将点击cell的行号传递到下一个视图)。
UIViewController *destination = segue.destinationViewController; 只要是 prepareForSegue:sender: 总会声明一个目标视图控制器(destination viewcontroller);
获取到下一个视图控制器后, 可以跳转过去了。但仅仅跳转还不够,总得将数据传递过去吧。 比如上一个视图是TableView,当用户点击某个Cell 进入下个页面时,就得将所点击的cell 行号传递给下个页面。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
  UIViewController *destination = segue.destinationViewController;
  if ([destination respondsToSelector:@selector(setDelegate:)])       
    {
      [destination setValue:self forKey:@"delegate"];
    }
  if ([destination respondsToSelector:@selector(setSelection:)]) 
  {
    // prepare selection info
    NSIndexPath *indexPath = [self.tableViewindexPathForCell:sender];
    id object = self.tasks[indexPath.row];
    NSDictionary *selection = @{@"indexPath" : indexPath,@"object" : object};
    [destination setValue:selection forKey:@"selection"];
  }
} 

接下来,我们重点谈下 prepareForSegue:sender: 的使用。 该方法的触发条件是:
当前的视图控制器即将被另一个视图控制器所替代时,segue将处于激活状态,从而调用prepareForSegue:sender: 方法。
具体对于TableView来说,当某个cell 被点击时,该cell所对应的segue将被激活,同时,这个method将被调用。我们最关心的数据传递问题, 就是利用这个时机完成的。

  • 也就是说 这个方法会在使用Segue时自动调用。
    在A页面中加入prepareForSegue函数,A显示B页面之前会调用该函数,可利用该函数传值给B
    segue.destinationViewController表示目标页面这里是B
    segue.sourceViewController表示源页面这里是A
    prepareForSegue:sender 参考

值的回传要用协议或delegate 参考

数据的存储

NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象
这篇博客详细的讲解了NSUserDefaults持久性存储的作用,很好的完成本周联系中对于多个页面跳转时,保留页面所填数据的功能

// 先将其转化为字典,然后用forin遍历删除即可
        NSUserDefaults *defatluts = [NSUserDefaults standardUserDefaults];
        NSDictionary *dictionary = [defatluts dictionaryRepresentation];
        for(NSString *key in [dictionary allKeys]){
            [defatluts removeObjectForKey:key];
            [defatluts synchronize];
        }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • viewController MVC架构(Model—View—Controller)是弱耦合思想的衍生产物 UI...
    lndv阅读 332评论 0 0
  • 1.自定义控件 a.继承某个控件 b.重写initWithFrame方法可以设置一些它的属性 c.在layouts...
    圍繞的城阅读 3,494评论 2 4
  • 翻译自“View Controller Programming Guide for iOS”。 1 弹出视图控制器...
    lakerszhy阅读 3,640评论 2 20
  • iOS 实战开发课程笔记 本贴旨在作为对极客班 《iOS 开发实战》第五期期课程视频重新学习的笔记。目标是建立一个...
    黄穆斌阅读 3,105评论 12 57
  • 我期望你, 你是春天的曙光! 我思念你, 你是秋天的留恋。 你展开黑色的翅膀, 化作闪电飞来, 将曙光的鲜红播撒!...
    怒隶阅读 410评论 3 4