zoukankan      html  css  js  c++  java
  • IOS复习NSBundle读取数据

    NSBundle读取图片到视图上,读取plist文件,读取txt文件显示在lable上;
     
    bundle是一个目录,其中包含了程序会使用到的资源. 这些资源包含了如图像,声音,编译好的代码,nib文件(用户也会把bundle称为plug-in). 对应bundle,cocoa提供了类NSBundle.
            我们的程序是一个bundle. 在Finder中,一个应用程序看上去和其他文件没有什么区别. 但是实际上它是一个包含了nib文件,编译代码,以及其他资源的目录. 我们把这个目录叫做程序的main bundle
            bundle中的有些资源可以本地化.例如,对于 foo.nib,我们可以有两个版本: 一个针对英语用户,一个针对法语用户.  在bundle中就会有两个子目录:English.lproj和French.lproj,我们把各自版本的 foo.nib文件放到其中. 当程序需要加载foo.nib文件时,bundle会自动根据所设置的语言来加载.
            NSBundle束,是一种特定的文件类型,其中的内容遵循特定的结构。
            NSBundle的一个主要作用是 获取Resources文件夹中的资源。
            NSBundle 对象代表了文件系统中的一个位置,这个位置存放的是我们程序的代码和资源。NSBundel 对象同时本地化程序资源,动态加载和卸载可执行代码,及本地化支持。有三种束,分别是面向应用程的、面向框架的和面向插件的;
    上面都是来自互联网,具体博客忘记了,太多了,下次把我学习的博客,书籍也总结出来
     
     
    首先新建Single View Application项目,名称NSbundleStudy
    然后拖拽一张图片到项目,我添加的是11876885_172115727182 _2.png
    拖拽方法是按command+option+a快捷键
     
    由于我没有重命名,有点麻烦。下面红框一定要勾选,那是复制文件到项目,如果不够选只不过是添加了一个引用,就好比copy和引用了指针的区别一样,

    在chenViewController.m添加代码到- (void)viewDidLoad方法,如下
    - (void)viewDidLoad
    {
        [superviewDidLoad];
    //定义一个NSBundle对象获取得到应用程序的main bundle
        NSBundle *mainBundle=[NSBundle mainBundle];
        //用对象mainBundle获取图片路径
        NSString *imagePath=[mainBundle pathForResource:@"11876885_172115727182_2" ofType:@"png"];
        UIImage *image = [[UIImage alloc] initWithContentsOfFile:imagePath];
        NSLog(@"imagepath:%@",imagePath);
        UIImageView *imageView = [[UIImageView alloc]initWithImage:image];
        CGRect frame = CGRectMake(10, 10, 300, 440);
        imageView.frame=frame;
        [self.view addSubview:imageView];
        //这是mainBundle获取 imagepath的路径,控制台输出的
    imagepath:/Users/chen/Library/Application Support/iPhone Simulator/6.1/Applications/47D65048-94EF-4889-B695-A94A145CCCA2/NSbundleStudy.app/11876885_172115727182_2.png
    }
    运行结果如下图

    //注意我设置的frame坐标,并不是全屏显示;
     
     
    顺便复习一下上次读取plist文件
    //    获取plist文件路径
    NSString *infoPlist = [[NSBundlemainBundle] pathForResource:@"testInfo"ofType:@"plist"];
    //    将testInfo.plist文件内容读取到字典中
    NSDictionary *dic = [[NSDictionaryalloc] initWithContentsOfFile:infoPlist];
    //    打印dic中所有内容
    NSLog(@"%@",dic);
    //    打印键值为key4的值
    NSLog(@"key4=%@",[dic objectForKey:@"key4"]);
    补充下,key4是testInfo.plist文件中对应的一个键值
     

    //接着学习mainBundle读取txt文件,然后把它显示在lable上,先添加一个有内容txt文件;读取txt文件和上面例子一样,再次想说一下如何显示在label上,如果txt中内容太多需要换行
    command+n快捷键新建文件叫text.txt
    在里面添加内容,随便添加


     
    - (void)viewDidLoad添加代码如下
    //获取txt文件路径
        NSString *txtPath = [mainBundle pathForResource:@"test" ofType:@"txt"];
        //将txt到string对象中,编码类型为NSUTF8StringEncoding
        NSString *string = [[NSString  alloc] initWithContentsOfFile:txtPath encoding:NSUTF8StringEncodingerror:nil];
        NSLog(@"%@",string);
        CGRect labelframe = CGRectMake(10, 10, 300, 440);
        UILabel *label = [[UILabel alloc] initWithFrame:labelframe];
        //将sring内容赋给lable的text属性
        label.text=string;
        //背景颜色设置成透明色
        label.backgroundColor = [UIColorclearColor];
        //字体颜色设置成红色
        label.textColor= [UIColor redColor];
     
    下面两行注释的被淘汰了,但是能用
        //设置lable文字左对齐显示
    //    label.textAlignment = UITextAlignmentLeft;
    //    //自动这行设置
    //    label.lineBreakMode = UILineBreakModeCharacterWrap;
        //等于0表示可根据具实际情况自动变动
        label.numberOfLines = 0;
        [self.view addSubview:label];
     
     
     
    运行结果如下,读取成功

     
    补充内容,正常补充内容大多来自互联网

    label.lineBreakMode =UILineBreakModeCharacterWrap;是设置换行的时候以什么为单位,此处设置是以字符为单位,还有一单词文单位的,UILineBreakMode定义在一个枚举类型中,想深入了解如何换行,可以更换UILineBreakMode中枚举种类进行测试下,此处不做测试;
     
    typedefenum {
        UILineBreakModeWordWrap = 0,
        UILineBreakModeCharacterWrap,
        UILineBreakModeClip,
        UILineBreakModeHeadTruncation,
        UILineBreakModeTailTruncation,
        UILineBreakModeMiddleTruncation,
    } UILineBreakMode;
     
    UILineBreakModeWordWrap = 0,
    以单词为单位换行,以单位为单位截断。
    UILineBreakModeCharacterWrap,
    以字符为单位换行,以字符为单位截断。
    UILineBreakModeClip,
    以单词为单位换行。以字符为单位截断。
    UILineBreakModeHeadTruncation,
    以单词为单位换行。如果是单行,则开始部分有省略号。如果是多行,则中间有省略号,省略号后面有4个字符。
    UILineBreakModeTailTruncation,
    以单词为单位换行。无论是单行还是多行,都是末尾有省略号。
    UILineBreakModeMiddleTruncation,
    以单词为单位换行。无论是单行还是多行,都是中间有省略号,省略号后面只有2个字符。
     
    (2)label.numberOfLines =0; 可以自动适应显示,如果等于1显示一行,对于10显示10行,但是label只是一个静态标签,如果你的txt文件中内容超多超多,不可能全部显示出来,最多显示view视图大小;假如说我们要想把可多可多的txt文件类容显示完怎么办呢,我们可以先在view上加一个scroll view视图,他是一个可以上下左右滚动的视图,然后设置把label设置大一些,放在scroll view之上;不过我们唱显示比较多的文字时并不是显示在label上,而是一个专门用于显示文字的Text viewk,他可以实现上下滚动显示所有文字内容;
                                               2013年8月7日,10:53,东南大学无锡分校桃园3宿舍106室
     

  • 相关阅读:
    C++ 扩展 Op
    Python 扩展 Op
    VS Code 调试 OneFlow
    运行时数据获取
    OFRecord 图片文件制数据集
    OFRecord 数据集加载
    OFRecord 数据格式
    OneFlow 并行特色
    Consistent 与 Mirrored 视角
    作业函数的定义与调用
  • 原文地址:https://www.cnblogs.com/ioschen/p/3248848.html
Copyright © 2011-2022 走看看