2015-06-03 2 views
3

Итак, у меня была эта проблема какое-то время, и если кто-то может привести меня на правильный путь, я бы очень признателен. В основном я создаю приложение, но с кнопкой настроек. Всякий раз, когда я включаю свой SegmentedControl или UISWITCH, я возвращаюсь обратно к нему по умолчанию. Кроме того, я хочу иметь элемент управления Segmented для изменения цвета. Я установил цвета, но вся информация, которую я хочу изменить, находится на контроллере # 1. В основном, как сделать страницу настроек, чтобы сохранить изменения. до сих пор мой код.Передача данных через ViewControllers - Сделать страницу настроек

- (IBAction)colorController:(id)sender { 

if (Controller.selectedSegmentIndex == 0) { 

    //App title text color 
    appTitle.textColor = [UIColor colorWithRed:1.00 green:1.00 blue:0.00 alpha:1.0]; 

    //Background color when selected 
    Controller.tintColor = [UIColor colorWithRed:1.00 green:1.00 blue:0.00 alpha:1.0]; 

    //The font of the selected 
    NSDictionary *fontColor = [NSDictionary dictionaryWithObjectsAndKeys: 
           [UIColor blackColor],NSForegroundColorAttributeName, 
           nil]; 
    [Controller setTitleTextAttributes:fontColor forState:UIControlStateSelected]; 



} 
if (Controller.selectedSegmentIndex == 1) { 

    //App title text color 
    appTitle.textColor = [UIColor colorWithRed:0.00 green:0.66 blue:1.00 alpha:1.0]; 

    //Background color when selected 
    Controller.tintColor = [UIColor colorWithRed:0.00 green:0.66 blue:1.00 alpha:1.0]; 

    //The font of the selected 
    NSDictionary *fontColor = [NSDictionary dictionaryWithObjectsAndKeys: 
           [UIColor whiteColor],NSForegroundColorAttributeName, 
           nil]; 
    [Controller setTitleTextAttributes:fontColor forState:UIControlStateSelected]; 

} 
if (Controller.selectedSegmentIndex == 2) { 

    //App title text color 
    appTitle.textColor = [UIColor colorWithRed:0.98 green:0.22 blue:0.22 alpha:1.0]; 

    //Background color when selected 
    Controller.tintColor = [UIColor colorWithRed:0.98 green:0.22 blue:0.22 alpha:1.0]; 


    //The font of the selected 
    NSDictionary *fontColor = [NSDictionary dictionaryWithObjectsAndKeys: 
           [UIColor whiteColor],NSForegroundColorAttributeName, 
           nil]; 
    [Controller setTitleTextAttributes:fontColor forState:UIControlStateSelected]; 
} 
if (Controller.selectedSegmentIndex == 3) { 

    //App title text color 
    appTitle.textColor = [UIColor colorWithRed:0.15 green:0.82 blue:0.44 alpha:1.0]; 

    //Background color when selected 
    Controller.tintColor = [UIColor colorWithRed:0.15 green:0.82 blue:0.44 alpha:1.0]; 

    //The font of the selected 
    NSDictionary *fontColor = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor], NSForegroundColorAttributeName, nil]; 
    [Controller setTitleTextAttributes:fontColor forState:UIControlStateSelected]; 

} 

}

Теперь, как вы можете увидеть «appTitle» находится на первом контроллере представления, поэтому он автоматически не работает. Как я могу это исправить. пожалуйста, соедините меня где-нибудь/покажите мне не сложно. (У меня тоже будет много меток)

ответ

1

Для этой цели я обычно использую структуру, объявленную на уровне файла (не вложенной в какой-либо класс). Таким образом, он должен быть доступен во всем приложении. Задайте значение при изменении выбранного сегмента; получить значение при загрузке контроллера вида. Вот пример в Swift:

struct setStruct { 
    var selSeg: Int = 0 
} 
var settings = setStruct() 

В настройках View Controller viewDidLoad:

Controller.selectedSegmentIndex = settings.selSeg 

В IBAction для сегментированного управления:

settings.selSeg = Controller.selectedSegmentIndex 
0

Если вы хотите сделать «настройки ", я бы предложил вам прочитать на NSUserDefaults. Вы можете создать значения по умолчанию в didFinishLaunchingWithOptionsAppDelegate.m.

Вот пример:

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    // this is a method I created to check if there are default values set already 
    [self checkUserDefaults]; 
    return YES; 
} 

#pragma mark - Initial defaults 

- (void)checkUserDefaults { 

    NSUserDefaults *defaults= [NSUserDefaults standardUserDefaults]; 
// If there's a default value for a key, then don't do anything 
    if([[[defaults dictionaryRepresentation] allKeys] containsObject:@"defaultTime"]){ 
     NSLog(@"User Defaults are ALREADY set"); 
    } else { 
// Otherwise, create a default value for it 

     // ** Set initial userDefaults ** 
     [[NSUserDefaults standardUserDefaults]setInteger:15 forKey:@"defaultTime"]; 

     NSLog(@"User Defaults have been initially set"); 
     } 
} 

В Interface Builder, вы можете создать TableViewController раскадровку и сделать tableView содержание статических ячеек. Вы можете создавать разделы для ячеек на вкладке «Инспектор атрибутов» в «Интерфейсостроителе». Затем вы можете перетащить ярлыки, переключатели и т. Д. И подключить их к классу PreferencesTableViewController, который вам нужно создать.

В принципе, вы создаете значение по умолчанию, которое сохраняется между запусками с этим:

[[NSUserDefaults standardUserDefaults]setInteger:15 forKey:@"defaultTime"] 

и вы называете это так:

[[NSUserDefaults standardUserDefaults]valueForKey:@"defaultTime"] 

Вы можете установить значения по умолчанию для многих вещей, как вы увидите в документации компании Apple

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/UserDefaults/AccessingPreferenceValues/AccessingPreferenceValues.html

Вот сообщение, связанное с UIColor s, которое, кажется, является тем, чем вы в первую очередь ориентируетесь.

Saving UIColor to and loading from NSUserDefaults

Смежные вопросы