iOS多界面設計雜談

判斷程序首次啓動

  • 利用NSUserDefaults,還能夠判斷程序的首次啓動,方法是在AppDelegate.m文件中找到:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
  • 該方法是UIApplication的協議方法,定義在AppDelegate類中,在程序每次啓動以後被調用。在該方法中定義NSUserDefaults單例,可用任意鍵值判斷是否爲首次啓動,由於在首次啓動時還未創建任何鍵值,代碼以下:
NSUserDefaults *launchSettings=[NSUserDefaults standardUserDefaults];
    if([launchSettings boolForKey:(@"hasLaunched")]==NO) {
        [launchSettings setBool:(YES) forKey:(@"hasLaunched")];
        [launchSettings setBool:(NO) forKey:(@"nightShiftOpen")];
    }
  • 其中if語句的條件若是成立就表明是首次啓動,可加入歡迎頁和新手提示等內容。

深刻理解UITabBarController各頁面的生命週期

  • UITabBarController是最經常使用的佈局方式,要注意在啓動時只有第一個頁面會被加載,其餘頁面不會被加載。同時再次切換到每一個頁面的時候對應UIViewController的viewDidLoad方法不會被調用,不能把須要實時刷新的語句放入其中。不過能夠利用方法:
- (void)viewWillAppear:(BOOL)animated

該方法是頁面即將出現的時候被調用,可放入實時刷新的語句,例以下面的例子是簡易的夜間模式的實現:app

- (void)viewWillAppear:(BOOL)animated {
    BOOL isOpenNightShift=[_userSettings boolForKey:(@"nightShiftOpen")];
    if(isOpenNightShift==YES) {
        self.tableView.backgroundColor=[UIColor blackColor];
        self.navigationController.navigationBar.backgroundColor=[UIColor blackColor];
    }
    else {
        self.tableView.backgroundColor=[UIColor whiteColor];
        self.navigationController.navigationBar.backgroundColor=[UIColor whiteColor];
    }
}

視圖控件監聽方法的兩種綁定方式

  • 關於視圖控件監聽方法的綁定,在包含StoryBoard或者xib文件的程序中,能夠經過純拖拽來實現,無需編寫代碼:只須要選擇控件並按住control按鈕進行拖拽,便可添加IBAction監聽器方法。
  • 可是在UITableView的使用中,UITableViewCell是要求作到重用(reusable)的,包含在Cell中的控件在StoryBoard中沒有對應的控件(例如Cell的accessoryView中的控件)。這時應該採用手動綁定的方式,先定義控件變量,例如在某UIViewController的@Interface中有以下定義:
@property (strong,nonatomic) UISwitch *nightShiftOpen;
  • 而後在viewDidLoad方法中,爲該控件申請控件並添加監聽器
if(_nightShiftOpen==nil) {
       _nightShiftOpen=[[UISwitch alloc]init];
    }
    [_nightShiftOpen addTarget:(self) action:(@selector(nightShiftOpenValueChanged:)) forControlEvents:(UIControlEventValueChanged)];
  • 其中nightShiftOpenValueChanged:是綁定的方法的名稱,而UIControlEventValueChanged是事件的類型,此處類型爲控件值的改變。

而後在對應的UIViewController中實現監聽器方法,此處實現的是夜間模式開關的監聽:佈局

- (void)nightShiftOpenValueChanged:(id)sender {
    if([_nightShiftOpen isOn]==YES) {
        [_userSettings setBool:(YES) forKey:(@"nightShiftOpen")];
        self.tableView.backgroundColor=[UIColor blackColor];
        self.navigationController.navigationBar.backgroundColor=[UIColor blackColor];
    }
    else {
        [_userSettings setBool:(NO) forKey:(@"nightShiftOpen")];
        self.tableView.backgroundColor=[UIColor whiteColor];
        self.navigationController.navigationBar.backgroundColor=[UIColor whiteColor];
    }
    [_userSettings synchronize];
}
  • 這樣在該UISwitch控件值改變時,會自動調用上面的方法。
相關文章
相關標籤/搜索