2012-10-30 225 views
2

我對IOS和Monotouch非常陌生,但精通.NET和C#。 UIButton沒有響應事件,我不知道爲什麼。我已經閱讀了至少3本有關MonoTouch編程的教科書,並在這裏閱讀了很多關於計算器和其他網站的問題和解答,但沒有找到解決方案。 我有子類一個UIButton獲得一個ID和密碼是:爲什麼我的UIButton沒有響應?

using System; 
using MonoTouch.UIKit; 
using System.Drawing; 

namespace Roombler.Views 
{ 
    public class SmallDottedMonthButton : UIButton 
    {  

     public SmallDottedMonthButton(int numberOfButton) 
     { 
      this.number = numberOfButton; 
      UIImage image = UIImage.FromFile("Green.png"); 

      this.SetBackgroundImage(image, UIControlState.Normal); 
     } 

     public int number = 0; 


    } 
} 

此代碼是那麼視圖中使用。該按鈕顯示正確,但我無法附加任何事件。我讀了啓用userInteraction可以做的伎倆,但不是在我的情況。這是一個如何使用自定義的UIButton(在一個名爲smallDottedMonthButtonNr1):

using System; 
using MonoTouch.UIKit; 
using System.Drawing; 
using Roombler.Controllers; 

namespace Roombler.Views 
{ 
    public class MonthSelectorView: UIView 
    { 
     public UILabel currentYearLabel; 
     public UILabel containerForDetailedWeeksLabel; 

     public SmallDottedMonthButton smallDottedMonthButtonNr1; 
     public SmallDottedMonthButton smallDottedMonthButtonNr2; 

     public NormalDottedMonthButton normalDottedMonthButtonNr1; 
     public NormalDottedMonthButton normalDottedMonthButtonNr2; 
     public NormalDottedMonthButton normalDottedMonthButtonNr3; 

     public WeekButton weekButtonNr1; 
     public WeekButton weekButtonNr2; 
     public WeekButton weekButtonNr3; 
     public WeekButton weekButtonNr4; 
     public WeekButton weekButtonNr5; 
     public WeekButton weekButtonNr6; 

     public NormalMonthButton normalMonthButtonNr1; 
     public NormalMonthButton normalMonthButtonNr2; 
     public NormalMonthButton normalMonthButtonNr3; 

     public SmallMonthButton smallMonthButtonNr1; 
     public SmallMonthButton smallMonthButtonNr2; 

     private UIScrollView baseView; 

     private DateTime currentMonth; 

     public MonthSelectorView() 
     { 
      this.UserInteractionEnabled = true; 
      smallDottedMonthButtonNr1 = new SmallDottedMonthButton(1); 
      //smallDottedMonthButtonNr1.SetNumberOfButton(1); 

      smallDottedMonthButtonNr2 = new SmallDottedMonthButton(2); 
      //smallDottedMonthButtonNr2.SetNumberOfButton(2); 

      normalDottedMonthButtonNr1 = new NormalDottedMonthButton(1); 

      normalDottedMonthButtonNr2 = new NormalDottedMonthButton(2); 

      normalDottedMonthButtonNr3 = new NormalDottedMonthButton(3); 

      weekButtonNr1 = new WeekButton(); 
      weekButtonNr1.SetNumberOfButton(1); 

      weekButtonNr2 = new WeekButton(); 
      weekButtonNr2.SetNumberOfButton(2); 

      weekButtonNr3 = new WeekButton(); 
      weekButtonNr3.SetNumberOfButton(3); 

      weekButtonNr4 = new WeekButton(); 
      weekButtonNr4.SetNumberOfButton(4); 

      weekButtonNr5 = new WeekButton(); 
      weekButtonNr5.SetNumberOfButton(5); 

      weekButtonNr6 = new WeekButton(); 
      weekButtonNr6.SetNumberOfButton(6); 

      normalMonthButtonNr1 = new NormalMonthButton(1); 

      normalMonthButtonNr2 = new NormalMonthButton(2); 

      normalMonthButtonNr3 = new NormalMonthButton(3); 

      smallMonthButtonNr1 = new SmallMonthButton(1); 
      smallMonthButtonNr2 = new SmallMonthButton(2); 

      baseView = new UIScrollView { 
       Frame = setSizeAndPosition(10.0f, 0.0f, 780.0f, 50.0f), 
       BackgroundColor = UIColor.DarkGray, 
       AutoresizingMask = UIViewAutoresizing.FlexibleWidth 
      }; 
      this.AddSubview(baseView); 

      baseView.UserInteractionEnabled = true; 

      currentYearLabel = new UILabel(new RectangleF(5.0f, 5.0f, 100.0f, 40.0f)); 
      currentYearLabel.Text = "2012"; 
      currentYearLabel.BackgroundColor = UIColor.Brown; 
      currentYearLabel.TextColor = UIColor.White; 
      currentYearLabel.TextAlignment = UITextAlignment.Center; 
      baseView.AddSubview(currentYearLabel); 


      SizeF size = setSize(40.0f, 40.0f); 
      DateTime date = currentMonth; 
      date = date.AddMonths(1); 
      constants = new MonthConstants(); 

      month = constants.GetNameOfMonth(date.Month, true); 

      smallDottedMonthButtonNr1.SetTitle(month, UIControlState.Normal); 
      smallDottedMonthButtonNr1.Font = UIFont.FromName("Arial", 8f); 
      smallDottedMonthButtonNr1.Frame = new RectangleF(100.0f, 15.0f, 40, 40); 
      smallDottedMonthButtonNr1.BackgroundColor = UIColor.White; 
      smallDottedMonthButtonNr1.SetTitleShadowColor(UIColor.Green,   UIControlState.Normal); 
      smallDottedMonthButtonNr1.SetTitleColor(UIColor.Black, UIControlState.Normal); 



      baseView.AddSubview(smallDottedMonthButtonNr1); 

      smallDottedMonthButtonNr1.TouchUpInside += HandleTouchUpInside; 


      addNormalDottedButton(normalDottedMonthButtonNr1, new PointF(160.0f, 20.0f)); 
      addNormalDottedButton(normalDottedMonthButtonNr2, new PointF(180.0f, 20.0f)); 
      addNormalDottedButton(normalDottedMonthButtonNr3, new PointF(200.0f, 20.0f)); 

      containerForDetailedWeeksLabel = new UILabel(new RectangleF(220.0f, 20.0f, 100.0f, 20.0f)); 


      addWeekButton(weekButtonNr1.GetButton(1), new PointF(230.0f, 20.0f)); 
      addWeekButton(weekButtonNr2.GetButton(2), new PointF(240.0f, 20.0f)); 
      addWeekButton(weekButtonNr3.GetButton(3), new PointF(250.0f, 20.0f)); 
      addWeekButton(weekButtonNr4.GetButton(4), new PointF(260.0f, 20.0f)); 
      addWeekButton(weekButtonNr5.GetButton(5), new PointF(270.0f, 20.0f)); 
      addWeekButton(weekButtonNr6.GetButton(6), new PointF(280.0f, 20.0f)); 

      addNormalMonthButton(normalMonthButtonNr1, new PointF(310.0f, 20.0f)); 
      addNormalMonthButton(normalMonthButtonNr2, new PointF(370.0f, 20.0f)); 
      addNormalMonthButton(normalMonthButtonNr3, new PointF(430.0f, 20.0f)); 

      addSmallMonthButton(smallMonthButtonNr1, new PointF(490.0f, 20.0f)); 
      addSmallMonthButton(smallMonthButtonNr2, new PointF(540.0f, 20.0f)); 

      this.AddSubview(containerForDetailedWeeksLabel); 


      UISlider weekOrMonthSlider; 

      weekOrMonthSlider = new UISlider { Frame = new RectangleF (500, 500, 
                  100, 50) }; 

      weekOrMonthSlider.MinValue = 0.0f; 
      weekOrMonthSlider.MaxValue = 20.0f; 
      weekOrMonthSlider.SetValue(10.0f, false); 

      weekOrMonthSlider.ValueChanged += delegate 
      { 
       //_text = _slider.Value.ToString(); 
       //_testLabel.Text = _text; 
      }; 
      this.AddSubview(weekOrMonthSlider); 


     } 
     void HandleTouchUpInside(object sender, EventArgs e) 
     { 
      smallDottedMonthButtonNr1.SetTitle("Test", UIControlState.Normal); 
     } 


     private RectangleF setSizeAndPosition(float x, float y, float width, float hight) 
     { 
      return new RectangleF(x, y, width, hight); 
     } 

     private SizeF setSize(float width, float hight) 
     { 
      return new SizeF(width, hight); 

     } 

     public void setCurrentMonth(DateTime currentMonth) 
     { 
      this.currentMonth = currentMonth; 
     } 

     String month; 
     MonthConstants constants; 

     private SmallDottedMonthButton addSmallDottedButton(SmallDottedMonthButton button, PointF position) 
     { 


      SizeF size = setSize(40.0f, 40.0f); 
      DateTime date = currentMonth; 
      date = date.AddMonths(button.number); 
      constants = new MonthConstants(); 

      month = constants.GetNameOfMonth(date.Month, true); 

      button.SetTitle(month, UIControlState.Normal); 
      button.Font = UIFont.FromName("Arial", 8f); 
      button.Frame = new RectangleF(position, size); 
      button.BackgroundColor = UIColor.White; 
      button.SetTitleShadowColor(UIColor.Green, UIControlState.Normal); 

      baseView.AddSubview(button); 
      return button; 

     } 

     private void addNormalDottedButton(NormalDottedMonthButton button, PointF position) 
     { 
      SizeF size = setSize(50.0f, 50.0f); 

      DateTime date = currentMonth; 
      date = date.AddMonths(button.number); 
      month = constants.GetNameOfMonth(date.Month, true); 

      button.SetTitle(month, UIControlState.Normal); 
      button.Frame = new RectangleF(position, size); 
      button.BackgroundColor = UIColor.White; 
      button.SetTitleShadowColor(UIColor.Green, UIControlState.Normal); 
      baseView.AddSubview(button); 
     } 

     private void addWeekButton(WeekButton button, PointF position) 
     { 
      SizeF size = setSize(35.0f, 35.0f); 

      DateTime date = currentMonth; 
      date = date.AddMonths(button.number); 
      month = constants.GetNameOfMonth(date.Month, true); 

      button.SetTitle(month, UIControlState.Normal); 
      button.Frame = new RectangleF(position, size); 
      button.BackgroundColor = UIColor.White; 
      button.SetTitleShadowColor(UIColor.Green, UIControlState.Normal); 
      baseView.AddSubview(button); 
     } 

     private void addNormalMonthButton(NormalMonthButton button, PointF position) 
     { 
      SizeF size = setSize(50.0f, 50.0f); 
      DateTime date = currentMonth; 
      date = date.AddMonths(button.number); 

      month = constants.GetNameOfMonth(date.Month, true); 

      button.SetTitle(month, UIControlState.Normal); 
      button.Frame = new RectangleF(position, size); 
      button.BackgroundColor = UIColor.White; 
      button.SetTitleShadowColor(UIColor.Green, UIControlState.Normal); 
      baseView.AddSubview(button); 
     } 

     private void addSmallMonthButton(SmallMonthButton button, PointF position) 
     { 

      SizeF size = setSize(40.0f, 40.0f); 

      DateTime date = currentMonth; 
      date = date.AddMonths(button.number); 
      month = constants.GetNameOfMonth(date.Month, true); 

      button.SetTitle(month, UIControlState.Normal); 
      button.Frame = new RectangleF(position, size); 
      button.BackgroundColor = UIColor.White; 
      button.SetTitleShadowColor(UIColor.Green, UIControlState.Normal); 
      baseView.AddSubview(button); 
     } 
    } 
} 

我有點丟在這裏和真的想一些幫助或者只是一個暗示我應該走哪個方向。

親切的問候,其中按鈕被添加到的 納斯

+0

當我繼承UIButton(而不是實例化它並直接設置屬性)時,我得到了一個非常奇怪的行爲。如果你不子類會發生什麼?你有同樣的問題嗎? –

+0

嗨柯克,我已經安排了我的代碼,以便我沒有繼承UIButton,而是實例化和設置屬性的「正常」方式。 – Jonas

+0

但是,問題仍然存在,並且按鈕仍然沒有響應。 正如我所瞭解的IOS和MonoTouch,視圖可以駐留在其他視圖。因此,我通過Main和AppDelegate啓動的「main」視圖中的按鈕來查看視圖。這可能是問題嗎?或者我應該以其他方式思考? – Jonas

回答

0

檢查邊界/幀。雖然它是一個scrollView,所以我猜如果你能看到你的按鈕很好。

是否把一個斷點

smallDottedMonthButtonNr1.SetTitle("Test", UIControlState.Normal); 

幫助呢?

您是否100%確定沒有其他視圖覆蓋您的按鈕?

此外,出於好奇,請嘗試TouchDown而不是TouchUpInside。

相關問題