zoukankan      html  css  js  c++  java
  • ios入门笔记(创建隐式首选项,实现系统设置,实现文件系统存储)

    首先需要键

    首先define定义可以避免繁琐

    #define kONoffToggle @“onoff”

    #define kBrightnessLevel @“brightness”

    选择首选项内容

    代码写在首选项相关操作中

    -(IBAction)setLightSOurceAlphaValue

    {

    NSUserDefults *userDefaults = [NSUserDefaults standerdUSerDefaults];          //用standardUserDefaults获取NSUSerDefaults单例

    [userDefaults setBool:self.toggleSwitch.on forkey:konofftoggle];                       //switch的on属性

    [userDefaults setfloat:self.brightnessslider.value forkey:kbrightnesslevel];               //  slider的value属性。   选择相应的方法,有setFloat,setBool,setObject,setURL.......

    [userDefalts synchronize];                    //确保立即存储设置

    ......相关该方法其他操作

    }

    在界面装载时导入首选项

    -(void)viewDidLoad

    {

      NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

      self.brightnessSlider.value = [userDefaults floatforkey:kbrightnessLevel];

      self.toggleseitch.on = [userdefaults boolforkey:keyonoffToggle];

    .....相应操作

      if([userDefaults boolForkey: kOnOffToggle])

    {

      self.lightSource.alpha = [userdefaults floatForkey:kbrightnesslevel];

    ......

    }


    实现系统设置

    首先设计界面并创建好个输出口

    创建设置束,在左下角+号添加resourse文件。放入supportingfile编组。随后展开settings.bundle,打开ROOT.plist进行设置

    会看见很多个item,将item0设置为Grop类型,并将Title设置为sympathyimage(Grop即为设置页面中分段标题,title可以对他进行设置)

    随后将item1(就是item0grop下的选项)类型设置multivalue(可以下拉选项的类型)展开该属性将title改为imagename(这里就是选项卡的标题)并在该属性下设置identifier(应用程序中用这个来引用这个值)defaultvalue(默认显示的值)接着增添属性(右键addrow,增添的是imagename的子属性)Values和Titles(都为array类型因为要与imagename这个下拉列表配套),在values的属性中再次添加3个string属性将其们value改为dog,crazydog和coral,titles同样

    在item2设置grop2设置第二个分段标题为contact

    在item3设置类型textfield(用于用户输入文字)

    defaultvalue 为yourname,(设置为string类型)identifier为name(也设置为string类型)

    同时为其增加三个子属性(yourname这个选项的子属性)名称设置为KeyboardType,,Autocapitalization Type和Autocorrection Type,值设置为(Alphabet,Words,No)

    同时增加Email选项和上面那个一样

    接着添加ABOUT字段标题

    再在下一个ITEM中类型改为child pane title为About添加Filename子属性(其子属性的值为打开的子窗口使用另一个plist),type和Vlaue设置为String和About,

    要重新创建About.plist,快捷方法是选择文件rootlist(就是我们设置好的这个)复制他,刷新下编组,再打开他,右键出现的上下文菜单,设置property list type为iphone setting plist(让属性名变为易懂的英语)随后编辑子窗口的plist。(一般包含版本信息)。

    使应用程序能够使用首选项

    在viewcontroller中声明方法

    -(void)setValuesFromPreferences

    在.M中

    -(void)setValuesFromPreferences {    
        NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];            //获取指向NSUserDefaults的单例引用
        
        NSDictionary *initialDefaults=[[NSDictionary alloc]                    //初始化initialDefaults的数据字典,如果为使用应用程序setting设置首选项,则将使用这些键值对
                                       initWithObjectsAndKeys:
                                       @"Dog", kPicture,
                                       @"Your Name", kName,
                                       @"you@yours.com",kEmail,
                                       @"(555)555-1212",kPhone,
                                       nil];
        [userDefaults registerDefaults:initialDefaults];          //使用NSUSerDefaults的方法registerDefaults注册默认设置                     
       // [userDefaults synchronize];       
        
        NSString *picturePreference = [userDefaults stringForKey:kPicture];               //在.M中声明过了define kpicture = @“picture”
        if ([picturePreference isEqualToString:@"Dog"]) {
            self.picture.image = [UIImage imageNamed:@"dog1.png"];
        } else if ([picturePreference isEqualToString:@"Crazy Dog"]) {
            self.picture.image = [UIImage imageNamed:@"dog2.png"];
        } else {
            self.picture.image = [UIImage imageNamed:@"coral.png"];
        }
        
        self.name.text = [userDefaults stringForKey:kName];
        self.email.text = [userDefaults stringForKey:kEmail];
        self.phone.text = [userDefaults stringForKey:kPhone];
    }   

    在viewdidload中调用

    - (void)viewDidLoad
    {
        [self setValuesFromPreferences];
        [super viewDidLoad];
    }


    实现文件系统存储

    设计界面

    三个文本框读入数据,两个按钮一个存入数据一个显示已存过的数据显示在一个可滚动视图中(uitextview)

    注意点设计一个全屏按钮在底层,实现隐藏键盘操作,hidekeyboard,同时将三个文本框的did end on exit也连接在该操作上,(实现按DONE后隐藏键盘)。

    -(IBAction)hidekeyboard

    {

      [self.lastname resignFirstResponder];

      [self.....];

      [self....];          //三个文本框全部都放弃第一响应者 resignResponder

    }

    存储按钮操作

     1 - (IBAction)storeResults:(id)sender {
     2     
     3     NSString *csvLine=[NSString stringWithFormat:@"%@,%@,%@
    ",          //设置字符串csvLine设置其格式
     4                        self.firstName.text,
     5                        self.lastName.text,
     6                        self.email.text];
     7     
     8     NSString *docDir = [NSSearchPathForDirectoriesInDomains(              // 该函数返回指向应用程序的目录documents或Library/catch路劲(若要查询缓存文件则NSDocumentDirectory改为NScachesDirectory),该函数可返回多个目录,因此该函数调用结果为一个Nsarray对象,(所以要用atindex)获取路径(指向当前程序document目录)赋予变量docDIr
     9                                     NSDocumentDirectory,
    10                                     NSUserDomainMask, YES) 
    11                         objectAtIndex: 0];
    12     NSString *surveyFile = [docDir                                      //加上文件名surveyresult.csv以创建完整的调查文件路径
    13                             stringByAppendingPathComponent:
    14                             @"surveyresults.csv"];
    15     
    16     if  (![[NSFileManager defaultManager] fileExistsAtPath:surveyFile]) {              //查看文件是否存在,不存在则创建,flieExitsAtpath用于查看是否存在
    17         [[NSFileManager defaultManager] 
    18                 createFileAtPath:surveyFile contents:nil attributes:nil];
    19     }
    20     
    21     NSFileHandle *fileHandle = [NSFileHandle                                    //创建文件句柄指向surveyPath指定的文件
    22                                 fileHandleForUpdatingAtPath:surveyFile];
    23     [fileHandle seekToEndOfFile];                              //移到文件末尾,在文件末尾写入数据
    24     [fileHandle writeData:[csvLine                           //用writeData方法将csvLine内容写入文件
    25                            dataUsingEncoding:NSUTF8StringEncoding]];
    26     [fileHandle closeFile];                                         //关闭文件
    27     
    28     self.firstName.text=@"";                                //将文本框内容清空
    29     self.lastName.text=@"";
    30     self.email.text=@"";
    31 }

    showResult获取文件数据

     1 - (IBAction)showResults:(id)sender {
     2     NSString *docDir = [NSSearchPathForDirectoriesInDomains(
     3                                     NSDocumentDirectory,
     4                                     NSUserDomainMask, YES) 
     5                         objectAtIndex: 0];
     6     NSString *surveyFile = [docDir 
     7                             stringByAppendingPathComponent:
     8                             @"surveyresults.csv"];
     9     
    10     if  ([[NSFileManager defaultManager] fileExistsAtPath:surveyFile]) {              //判断该变量指定的文件是否存在
    11         NSFileHandle *fileHandle = [NSFileHandle 
    12                                     fileHandleForReadingAtPath:surveyFile];
    13         NSString *surveyResults=[[NSString alloc] 
    14                                  initWithData:[fileHandle availableData]           //使用方法availableData获取文件全部内容将其存储到字符串变量surveyResult中。
    15                                  encoding:NSUTF8StringEncoding];
    16         [fileHandle closeFile];                            //关闭文件
    17         self.resultsView.text=surveyResults;                  //使用字符串变量surveyResult内容更新用户界面
    18     }
    19 }
  • 相关阅读:
    BZOJ_3159_决战
    11.19 ~ 11.25训练计划+总结
    BZOJ_1304_[CQOI2009]叶子的染色_树形DP
    BZOJ_1999_[Noip2007]Core树网的核_单调队列+树形DP
    BZOJ_4033_[HAOI2015]树上染色_树形DP
    BZOJ_5338_ [TJOI2018]xor_可持久化trie
    BZOJ_2957_楼房重建_线段树
    BZOJ_3124_[Sdoi2013]直径_树形DP
    BZOJ_4987_Tree_树形DP
    「JOISC 2019 Day2」两个天线(线段树)
  • 原文地址:https://www.cnblogs.com/Ponytai1/p/6104286.html
Copyright © 2011-2022 走看看