2012-03-16 22 views
0

我是MonoTouch的新手,並且已將以下代碼添加到我的SingleViewApplication中。你可以在下面看到我的控制器代碼,點擊按鈕後,我試圖改變背景。如何在Monotouch中更改UIButton的背景顏色

public partial class FirstViewAppViewController : UIViewController 
{ 
    public FirstViewAppViewController() : base ("FirstViewAppViewController", null) 
    { 
    } 

    UIButton buttonChangeColor; 
    private void CreateButton(){ 
     RectangleF viewFrame = this.View.Frame; 
     RectangleF buttonFrame = new RectangleF (10f, viewFrame.Bottom - 
     200f, viewFrame.Width - 20f, 50f); 
     this.buttonChangeColor = UIButton.FromType 
     (UIButtonType.RoundedRect); 
     this.buttonChangeColor.Frame = buttonFrame; 
     this.buttonChangeColor.SetTitle ("Tap to change view color", 
     UIControlState.Normal); 
     this.buttonChangeColor.SetTitle ("Changing color...", 
     UIControlState.Highlighted); 
     this.buttonChangeColor.TouchUpInside += 
     this.buttonChangeColor_TouchUpInside; 
     this.View.AddSubview (this.buttonChangeColor); 
    } 

    bool isRed; 
    private void buttonChangeColor_TouchUpInside (object sender, EventArgs e){ 
     if (this.isRed) { 
     this.View.BackgroundColor = UIColor.LightGray; 
     this.isRed = false; 
     } else { 
     this.View.BackgroundColor = UIColor.Red; 
     this.isRed = true; 
     } 
    } 

    public override void ViewDidLoad() 
    { 
     base.ViewDidLoad(); 

     this.CreateButton(); 

     // Perform any additional setup after loading the view, typically from a nib. 
    } 

它看起來好像沒什麼問題,但我沒有看到背景色模擬器變化。

任何想法?謝謝。

回答

3

我也面臨這個問題,但我解決了這個問題,希望這個代碼是幫助你

public static class SwapUIButtonColor 
{ 
#region prop 
public static UIButton PreviousButton { 
get 
{ 
return _previousButton 
} 
set 
{ 
_previousButton = value; 
} 
} 
public static UIButton CurrentButton { 
get{ 
return _currentButton; 
} 
set{ 
_currentButton = value; 
} 
} 
public static bool SwapColor (UIButton sender, bool isPrevBakGraound) 
{ 
if (isPrevBakGraound == false){ 
InitApplyColorBorder (sender); 
SwapUIButtonColor.PreviousButton = sender; 
return true; 
} 
else{ 
if (SwapUIButtonColor.PreviousButton != sender){ 
InitApplyColorBorder (sender); 
SwapUIButtonColor.CurrentButton = PreviousButton; 
PreviousButton = sender; 
SwapUIButtonColor.CurrentButton.Layer.BorderColor = (UIColor.Black).CGColor; 
SwapUIButtonColor.CurrentButton.Layer.BorderWidth = 0f; 
SwapUIButtonColor.CurrentButton.Layer.CornerRadius = 0f;  
} 
else if (SwapUIButtonColor.PreviousButton == sender){ 
InitApplyColorBorder (sender); 
SwapUIButtonColor.PreviousButton = sender; 
} 
return true ; 
} 
static void InitApplyColorBorder (UIButton sender){ 
sender.Layer.BorderColor = (UIColor.Red).CGColor; 
sender.Layer.BorderWidth = 1.0f; 
sender.Layer.CornerRadius = 10f; 
} 
} 

也從viewDidLoad方法調用上的UIButton這上面的方法Click事件

private bool isPrevBakGraound = false; 
isPrevBakGraound = SwapUIButtonColor.SwapColor (btnReset, isPrevBakGraound); 
0

通過添加斷點或控制檯輸出,確保您的代碼實際上正在您的eventHandler中運行。如果這可以解決,也許你只是錯過了「SetNeedsDisplay」。

試試這個:

private void buttonChangeColor_TouchUpInside (object sender, EventArgs e){ 
    if (this.isRed) { 
    Console.WriteLine("isRed"); //Debug-Output 
    this.View.BackgroundColor = UIColor.LightGray; 
    this.isRed = false; 
    } else { 
    Console.WriteLine("isNotRed"); // Debug-Output 
    this.View.BackgroundColor = UIColor.Red; 
    this.isRed = true; 
    } 
    this.View.SetNeedsDisplay(); // Should force the View to redraw 
} 
+0

謝謝CHIFFRE爲您的答案。我可以使用斷點調試代碼,並添加了控制檯語句,它們都按預期工作,但即使在添加SetNeedsDisplay()後,背景顏色也不會改變。我已經在Lion OS上安裝了最新版本的MonoTouch(穩定)版本。 – skjagini 2012-03-17 07:12:31

0

這個例子是從MonoTouch的書籍之一採取了,我不得不轉換的源代碼,對MonoTouch的最新版本一起使用。

原始源所指子視圖作爲

this.subView.BackgroundColor = UIColor.LightGray; 

在這個過程中我無法創建爲視圖的出口,即子視圖。

如果沒有創建出口,所述視圖可以以下列方式也

this.View.SubViews[0].BackgroundColor = UIColor.LightGray 

訪問和它解決了這一問題。