2015-02-07 3 views
1

Итак, у меня есть HomeViewController (рисунок 1) с двумя кнопками, одним белым и одним синим. В правом нижнем углу вы можете увидеть кнопку, которая имеет модальный элемент SettingsViewController (рисунок 2), на этом контроллере представления есть 4 кнопки, чтобы пользователь мог выбрать, какую цветовую схему они предпочитают. Представьте, пользователь нажмет первый (красный), а затем, при отклонении контроллер представления цветовую схему HomeViewController должен выглядеть как изображение 3.Измените всю цветовую схему приложения

enter image description here

Любые идеи о том, как сделать это на эффективно/простой способ ?.

+0

Вы можете сохранить выбранный цвет в 'переменной UIColor' и установить цвета кнопки для этой переменной. – NobodyNada

ответ

1

Есть два хороших способа вы могли бы сделать это: 1) Делегирование и 2) viewWillAppear:.

Для делегирования вам необходимо определить протокол. Ваш HomeViewController будет delegate для этого протокола, и ваш SettingsViewController назовет его.

//SettingsViewController.h 

@protocol SettingsDelegate <NSObject> 
@required 
-(void)colorChanged:(UIColor *)color; 
@end 

@interface SettingsViewController : UIViewController 

@property (nonatomic, weak) id<SettingsDelegate> delegate; 

@end 

Где, когда параметры просмотр контроллер настроен, убедитесь, чтобы установить self.delegate равную ссылку на HomeViewController. Это обязательно.

Затем, когда ваш пользователь изменяет цвет, звоните:

[self.delegate colorChanged:whateverColor]; 

Ваш делегат должен, очевидно, соблюдать этот метод, а также изменить цвет соответствующим образом:

-(void)colorChanged:(UIColor *)color { 

    [myButton setBackgroundColor:color]; 
} 

Для viewWillAppear:, просто сохраните цвет где-нибудь и установите цвет своей кнопки в вашем методе контроллера вида для этого. viewWillAppear: будет вызвана, когда ваши настройки просмотра собирается исчезать и показать контроллер домашнего просмотра:

-(void)viewWillAppear:(BOOL)animated { 

    [super viewWillAppear:animated]; 

    [myButton setBackgroundColor:mySavedColor]; 
} 
+0

Я сделал это, используя протокол, хотя мне нужно будет прочитать немного больше о делегатах и ​​протоколах, потому что, хотя он работает, я не делаю то, что происходит именно так. Сначала я попытался использовать метод viewWillAppear, но как бы вы установили переменную mySavedColor (в HomeViewController) из SettingsViewController? – iDeC

+0

@iDeC да, определенно прочитайте больше об этом и узнайте, как это работает. Вам нужно было бы сохранить 'mySavedColor' где-нибудь (см. [Этот вопрос] (http://stackoverflow.com/questions/1275662/saving-uicolor-to-and-loading-from-nsuserdefaults)), а затем получить его в' viewWillAppear: '. – rebello95

0
In HomeViewController 
On SettigButton Click 
{ 
    Pass the HomeViewController delegate object SettingsViewController 
    Present your color Picker SettingsViewController 

} 

In SettingsViewController 
Define protocol name SettingsViewControllerDelegate 
    { 
    -(void)selectedColor:(UIColor*)color; 
    } 

    return the selected color On dismissViewController 
    if(delegate) 
    { 
    [delegate selectedColor:color]; 
    } 


Again In HomeViewController 
-(void)selectedColor:(UIColor*)color 
{ 
    view.backgroundColor=color; 

}