我对 IOS 和 Monotouch 比较陌生,但精通 .NET 和 C#。UIButton 没有响应事件,我不知道为什么。我已经阅读了至少 3 本关于 MonoTouch 编程的教科书,并在 stackoverflow 和其他网站上阅读了许多问题和答案,但没有找到解决方案。我对 UIButton 进行了子类化以获取 id,代码为:
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);
}
}
}
我在这里有点迷路,真的很想得到一些帮助,或者只是提示我应该往哪个方向走。
亲切的问候乔纳斯