Как изменить цвет фона UIButton в Monotouch - PullRequest
1 голос
/ 16 марта 2012

Я новичок в Monotouch и добавил следующий код в мое приложение SingleViewApplication. И вы можете увидеть мой код контроллера ниже, где я пытаюсь изменить фон после нажатия кнопки.

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 ]

3 голосов
/ 01 августа 2012

Я также сталкиваюсь с этой проблемой, но я решаю эту проблему, надеюсь, этот код поможет вам

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 events

private bool isPrevBakGraound = false;  
isPrevBakGraound = SwapUIButtonColor.SwapColor (btnReset, isPrevBakGraound);
0 голосов
/ 18 марта 2012

Этот пример был взят из одной из книг MonoTouch, и мне пришлось преобразовать исходный код для работы над последней версией MonoTouch.

Исходный источник ссылался на subView как

this.subView.BackgroundColor = UIColor.LightGray;

И в процессе я не смог создать выход для представления, то есть subView.

Если розетка не создана, к представлению также можно получить доступ следующим образом

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

и это решило проблему.

0 голосов
/ 16 марта 2012

Убедитесь, что ваш код действительно выполняется в вашем 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...