RootViewController.m
| /* | 
| Copyright (C) 2014 Apple Inc. All Rights Reserved. | 
| See LICENSE.txt for this sample’s licensing information | 
| Abstract: | 
| The main UIViewController containing the app's user interface. | 
| */ | 
| #import "RootViewController.h" | 
| // The value for the 'Text Color' setting is stored as an integer between | 
| // one and three inclusive. This enumeration provides a mapping between | 
| // the integer value, and color. | 
| typedef NS_ENUM(NSUInteger, TextColor) { | 
| blue = 1, | 
| red, | 
| green | 
| }; | 
| // It's best practice to define constant strings for each preference's key. | 
| // These constants should be defined in a location that is visible to all | 
| // source files that will be accessing the preferences. | 
| NSString* const kFirstNameKey = @"firstNameKey"; | 
| NSString* const kLastNameKey = @"lastNameKey"; | 
| NSString* const kNameColorKey = @"nameColorKey"; | 
| @interface RootViewController () | 
| // Values from the app's preferences | 
| @property (strong) NSString *firstName; | 
| @property (strong) NSString *lastName; | 
| @property (strong) UIColor *nameColor; | 
| @end | 
| @implementation RootViewController | 
| //| ---------------------------------------------------------------------------- | 
| - (void)viewDidLoad | 
| { | 
| [super viewDidLoad]; | 
| // Only iOS 8 and above supports the UIApplicationOpenSettingsURLString | 
| // used to launch the Settings app from your application. If the | 
| // UIApplicationOpenSettingsURLString is not present, we're running on an | 
| // old version of iOS. Remove the Settings button from the navigation bar | 
| // since it won't be able to do anything. | 
|     if (&UIApplicationOpenSettingsURLString == NULL) { | 
| self.navigationItem.leftBarButtonItem = nil; | 
| } | 
| } | 
| //| ---------------------------------------------------------------------------- | 
| - (void)viewWillAppear:(BOOL)animated | 
| { | 
| [super viewWillAppear:animated]; | 
| // Load our preferences. Preloading the relevant preferences here will | 
| // prevent possible diskIO latency from stalling our code in more time | 
| // critical areas, such as tableView:cellForRowAtIndexPath:, where the | 
| // values associated with these preferences are actually needed. | 
| [self onDefaultsChanged:nil]; | 
| // Begin listening for changes to our preferences when the Settings app does | 
| // so, when we are resumed from the backround, this will give us a chance to | 
| // update our UI | 
| [[NSNotificationCenter defaultCenter] addObserver:self | 
| selector:@selector(onDefaultsChanged:) | 
| name:NSUserDefaultsDidChangeNotification | 
| object:nil]; | 
| } | 
| //| ---------------------------------------------------------------------------- | 
| - (void)viewWillDisappear:(BOOL)animated | 
| { | 
| [super viewWillDisappear:animated]; | 
| // Stop listening for the NSUserDefaultsDidChangeNotification | 
| [[NSNotificationCenter defaultCenter] removeObserver:self name:NSUserDefaultsDidChangeNotification object:nil]; | 
| } | 
| //| ---------------------------------------------------------------------------- | 
| //! Unwind action for the Done button on the Info screen. | 
| // | 
| - (IBAction)unwindFromInfoScreen:(UIStoryboardSegue *)sender | 
| { } | 
| #pragma mark - | 
| #pragma mark Preferences | 
| //| ---------------------------------------------------------------------------- | 
| //! Launches the Settings app. The Settings app will automatically navigate to | 
| //! to the settings page for this app. | 
| // | 
| - (IBAction)openApplicationSettings:(id)sender | 
| { | 
| // UIApplicationOpenSettingsURLString is only availiable in iOS 8 and above. | 
| // The following code will crash if run on a prior version of iOS. See the | 
| // check in -viewDidLoad. | 
| [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]]; | 
| } | 
| //| ---------------------------------------------------------------------------- | 
| // Handler for the NSUserDefaultsDidChangeNotification. Loads the preferences | 
| // from the defaults database into the holding properies, then asks the | 
| // tableView to reload itself. | 
| // | 
| - (void)onDefaultsChanged:(NSNotification *)aNotification | 
| { | 
| NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults]; | 
| self.firstName = [standardDefaults objectForKey:kFirstNameKey]; | 
| self.lastName = [standardDefaults objectForKey:kLastNameKey]; | 
| // The value for the 'Text Color' setting is stored as an integer between | 
| // one and three inclusive. Convert the integer into a UIColor object. | 
| TextColor textColor = [standardDefaults integerForKey:kNameColorKey]; | 
|     switch (textColor) { | 
| case blue: | 
| self.nameColor = [UIColor blueColor]; | 
| break; | 
| case red: | 
| self.nameColor = [UIColor redColor]; | 
| break; | 
| case green: | 
| self.nameColor = [UIColor greenColor]; | 
| break; | 
| default: | 
| NSAssert(NO, @"Got an unexpected value %@ for %@", @(textColor), kNameColorKey); | 
| } | 
| [self.tableView reloadData]; | 
| } | 
| #pragma mark - | 
| #pragma mark UITableViewDataSource | 
| //| ---------------------------------------------------------------------------- | 
| - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section | 
| { | 
| return 1; | 
| } | 
| //| ---------------------------------------------------------------------------- | 
| - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath | 
| { | 
| UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"NameCell"]; | 
| cell.textLabel.text = [NSString stringWithFormat:@"%@ %@", self.firstName, self.lastName]; | 
| cell.textLabel.textColor = self.nameColor; | 
| return cell; | 
| } | 
| @end | 
Copyright © 2014 Apple Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2014-09-17