2015-02-07 68 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; 

}