2015-02-07 69 views
1

因此,我有一个HomeViewController(图片1),带有两个按钮,一个白色和一个蓝色。在右下角你可以看到一个按钮,它模式地呈现一个SettingsViewController(图2),在这个视图控制器上有4个按钮,所以用户可以选择他们喜欢哪种配色方案。试想一下,用户按下第一个(红色),那么,驳回视图控制器时HomeViewController的配色方案看起来应该像图3更改所有应用配色方案

enter image description here

关于如何做到这一点的一个有效/简单的方法任何想法?。

+0

你可以选择的颜色保存在'UIColor'变量,并设置按钮的颜色,以该变量:当你的设置中查看即将消失,并显示主页视图控制器viewWillAppear:将被调用。 – NobodyNada 2015-02-07 23:54:25

回答

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:,只是将颜色保存在某处并在您的视图控制器的方法中设置按钮的颜色。

-(void)viewWillAppear:(BOOL)animated { 

    [super viewWillAppear:animated]; 

    [myButton setBackgroundColor:mySavedColor]; 
} 
+0

我使用协议做了它,虽然我必须多了解一些代表和协议,因为即使它有效,我也不会发生什么。 起初我尝试过使用viewWillAppear方法,但是如何在SettingsViewController中设置mySavedColor(在HomeViewController中)变量? – iDeC 2015-02-08 17:21:16

+0

@iDeC是的,绝对阅读更多关于它并了解它是如何工作的。你必须将'mySavedColor'保存在某处(参见[这个问题])(http://stackoverflow.com/questions/1275662/saving-uicolor-to-and-loading-from-nsuserdefaults)),然后在' viewWillAppear中:'。 – rebello95 2015-02-08 17:31:58

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; 

}