你好,歡迎來到IOS教程網

 Ios教程網 >> IOS基礎知識 >> IOS基礎知識 >> [iOS基礎]應用程序設置

[iOS基礎]應用程序設置

編輯:IOS基礎知識

關於設置與配置
1]設置 :應用之外的一個應用
2]配置:應用內開辟的一塊功能
對於一個應用,如果設置的時候需要先退出的話,一般情況屬於設置,不需要退出的話則為配置(例如:游戲的音響開啟屬於配置 )


設置


對於設置與配置有個大概的了解之後,接下來就說一下如何給一個應用添加“設置”的相關內容


應用程序設置包(Settings Bundle)

1、創建
(1)先創一個YCF_Test的工程
(2)File -> New -> New -> iOS -> Resource -> Settings Bundle -> next -> create :操作完得到Settings.bundle,如下:
這裡寫圖片描述

Root.Strings內容:

"Group" = "Group";
"Name" = "Name";
"none given" = "none given";
"Enabled" = "Enabled";

Root.plist內容:
這裡寫圖片描述

2、顯示詳細內容
選擇圖一的Settings.bundle -> Show in Finder ->選中Finder中的Settings.bundle -> 顯示包內容

3、添加文件或圖片
(1)顯示詳細內容
(2)將文件或圖片拖進即可

運行看效果:
這裡寫圖片描述

點擊YCF_Test可以看到:
這裡寫圖片描述

設置

下面進行“設置”的添加,也就是對圖二中的Preference Items內容修改成我們所需要的:
這裡寫圖片描述

將會涉及6種類型:
Group 、 Multi Value 、 Slider 、 Text Field 、Title 、 Toggle Switch

1、PSGroupSpecifier – 相當於tableView的header
(1)應該放在該組最前面
(2)如果添加的標題前面沒有任何分組的信息,則默認為一個分組
(3)可以通過兩種方式:

方式一:
這裡寫圖片描述vcq9tv6jujwvcD4NCjxwcmUgY2xhc3M9"brush:java;"> Type PSGroupSpecifier Title 賬號

2、PSTextFieldSpecifier

方法一:
這裡寫圖片描述

為什麼要設置Identifier呢?
下面獲取設置信息時,我們將通過Identifier來區分

方法二:

        
            Type
            PSTextFieldSpecifier
            Title
            用戶名
            Key
            name_preference
            KeyboardType
            Alphabet
            IsSecure
            
            DefaultValue
            
            AutocorrectionType
            None
            AutocapitalizationType
            None
        
        
            Type
            PSTextFieldSpecifier
            Title
            密碼
            Key
            password_preference
            AutocapitalizationType
            None
            AutocorrectionType
            No
            KeyboardType
            Alphabet
            IsSecure
            
            DefaultValue
            
        

3、其他的具體操作就不詳說

PSToggleSwitchSpecifier
PSSliderSpecifier
PSMultiValueSpecifier
PSChildPaneSpecifier
PSTitleValueSpecifier

        
            Type
            PSGroupSpecifier
            Title
            
        
        
            Type
            PSToggleSwitchSpecifier
            Title
            每月流量控制
            Key
            enable_preference
            DefaultValue
            
        
        
            Type
            PSGroupSpecifier
            Title
            每月流量控制(GB)
        
        
            Type
            PSSliderSpecifier
            Key
            slider_preference
            DefaultValue
            0.5
            MinimumValueImage
            [email protected]
            MaximumValueImage
            Menu_Icon_Message_Point@2x
            MinimumValue
            0
            MaximumValue
            1
        
        
            Type
            PSGroupSpecifier
            Title
            
        
        
            Type
            PSMultiValueSpecifier
            Values
            
                你的服務器
                我的服務器
            
            Title
            服務器
            Key
            multiValue_preference
            DefaultValue
            可選服務器
            Titles
            
                本地服務器
                遠程服務器
            
        
        
            Type
            PSChildPaneSpecifier
            Title
            通知
            File
            Notification
        

從上面看到PSMultiValueSpecifier的Values和Titles內容很像

            Values
            
                你的服務器
                我的服務器
            

            Titles
            
                本地服務器
                遠程服務器
            

Values的內容是獲取設置內容是看到的信息
Titles的內容是提供的選項中可見的

PSMultiValueSpecifier 與 PSChildPaneSpecifier :
PSMultiValueSpecifier :多選一

這裡寫圖片描述

“通知”的點擊後跳轉到另一個界面,該界面的設置用Notification.plist
(1)創建Notification.plist
(2)添加內容
這裡寫圖片描述

復制Root.plist中的:

StringsTable
    Root
    PreferenceSpecifiers

然後補全為:

StringsTable
    Root
    PreferenceSpecifiers
    
        
            Title
            
            Type
            PSGroupSpercifier
        
        
            DefaultValue
            
            Key
            sound_enabled_preference
            Title
            聲音
            Type
            PSToggleSwitchSpecifier
        
        
            DefaultValue
            
            Key
            vibrate_enabled_preference
            Title
            振動
            Type
            PSToggleSwitchSpecifier
        
    

看一下運行效果:
這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

讀取設置內容

// 根據要求搭建UI

//  Created by 陽丞楓 on 16/10/27.
//  Copyright ? 2016年 chengfengYang. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UILabel *password;
@property (weak, nonatomic) IBOutlet UILabel *username;
@property (weak, nonatomic) IBOutlet UILabel *clearCache;
@property (weak, nonatomic) IBOutlet UILabel *flowermeter;
@property (weak, nonatomic) IBOutlet UILabel *serverName;
@property (weak, nonatomic) IBOutlet UILabel *notiSound;
@property (weak, nonatomic) IBOutlet UILabel *notiVibrate;

@end

@implementation ViewController

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

- (void)viewWillAppear:(BOOL)animated {
    [self getData:nil];
}

- (IBAction)getData:(id)sender {

 NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
    self.username.text = [userDefault stringForKey:@"name_preference"];
    self.password.text = [userDefault stringForKey:@"password_preference"];
    if([userDefault boolForKey:@"enable_preference"]) {
        self.clearCache.text = @"YES";
    } else {
        self.clearCache.text = @"NO";
    }
    self.flowermeter.text = [NSString stringWithFormat:@"%.2fGB", [userDefault doubleForKey:@"slider_preference"]];
    self.serverName.text = [userDefault stringForKey:@"multiValue_preference"];
    if([userDefault boolForKey:@"sound_enabled_preference"]) {
        self.notiSound.text = @"YES";
    } else {
        self.notiSound.text = @"NO";
    }
    if([userDefault boolForKey:@"vibrate_enabled_preference"]) {
        self.notiVibrate.text = @"YES";
    } else {
        self.notiVibrate.text = @"NO";
    }   
}

@end

(1)刪除模擬器的應用再運行
(2)進行有關設置
(3)點擊按鈕“查看修改後的按鈕”
這裡寫圖片描述

大致流程如上

問題

未進行設置前,所有BOOLEAN類型的值都輸出位NO,但是很明顯所有PSToggleSwitchSpecifier的DefaultValue都設置為YES
有沒有可能返回nil而被初始化為NO呢?

(lldb) po [userDefault boolForKey:@"enable_preference"]
NO

(lldb) 

明顯返回值就是NO
也就是說默認設置只能被“設置”所識別,而獲取默認設置信息時是無效的

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved