2

私は、IOS と Monotouch にはかなり慣れていませんが、.NET と C# には精通しています。UIButton がイベントに応答していません。理由がわかりません。私は、MonoTouch を使用したプログラミングに関する教科書を少なくとも 3 冊読んだことがあります。また、stackoverflow と他のサイトの両方で多くの質問と回答を読みましたが、解決策が見つかりませんでした。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);
        }
    }
}

私はここで少し道に迷っており、本当に助けが欲しいのですが、どちらの方向に進むべきかのヒントが欲しいのです。

敬具ジョナス

4

1 に答える 1

0

ボタンが追加される場所の境界/フレームを確認します。それはscrollViewですが、ボタンが表示されれば問題ないと思います。

ブレークポイントを設定します

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

まったく助けますか?

他のビューがボタンを覆っていないことを 100% 確信していますか?

また、好奇心から、TouchUpInside ではなく TouchDown を試してみてください。

于 2012-11-15T05:41:22.983 に答える