mono touch中自定义事件

有不明白的地方欢迎入群 347636249 探讨

public class RowClickedEventArgs : EventArgs
{
    public NavItem Item { get; set; }
        
    public RowClickedEventArgs(NavItem item) : base()
    {
        this.Item = item; 
    }
}


public class NavItemTableSource : UITableViewSource
{
    public event EventHandler<RowClickedEventArgs> RowClicked;

          .....

    public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
    {
        // get a reference to the nav item
        NavItem navItem = navItems[indexPath.Section].Items[indexPath.Row];
            
        if(this.RowClicked != null)
            this.RowClicked(this, new RowClickedEventArgs(navItem));
    }

    ......


下面通过一个demo做具体的测试。

自定义一个弹出框,给它一个回调函数用以处理相关业务:

弹出框我们用UIView来做,注意,将背景色去掉。代码和效果如下:

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

namespace GCForum
{
	/// <summary>
	/// 自定义事件参数
	/// </summary>
	public class ImgTouchEventArgs : EventArgs
	{
		public ImgTouchEventArgs() : base()
		{
		}
	}

	public class LoadingChoose : UIView
	{
		private UIImageView imgvc;
		private GCForum.CCUIImage btnA, btnB, btnC;
		/// <summary>
		/// 定义回调函数事件
		/// </summary>
		public event EventHandler<ImgTouchEventArgs> ImgTouched;

		public LoadingChoose (RectangleF frame, JYLib.EnumCenter.EChooseButton cb) : base(frame)
		{
			this.BackgroundColor = UIColor.Clear;

			float centerX = Frame.Width / 2;
			float centerY = Frame.Height / 2;

			imgvc = ControlCenter.CreateImageView (new RectangleF (centerX - 118, centerY - 88, 236, 136), "doloadpfbg.png");
			this.AddSubview (imgvc);
			this.SendSubviewToBack (imgvc);

			btnA = ControlCenter.CreateCCUIImage (new RectangleF (centerX - 73, centerY - 35, 63, 33), getimg (cb, 0));
			btnA.CCValueString = "0";
			this.AddSubview (btnA); //按钮1
			btnB = ControlCenter.CreateCCUIImage (new RectangleF (centerX + 20, centerY - 35, 63, 33), getimg (cb, 1));
			btnB.CCValueString = "1";
			this.AddSubview (btnB); //按钮2
			btnC = ControlCenter.CreateCCUIImage (new RectangleF (centerX + 85, centerY - 80, 25, 25), "closed.png");
			btnC.CCValueString = "4";
			this.AddSubview (btnC); //关闭按钮
		}

		private string getimg(JYLib.EnumCenter.EChooseButton cb, int tag)
		{
			if (cb == JYLib.EnumCenter.EChooseButton.Confirm) {
				return tag == 0 ? BtnBgcImg [0] : BtnBgcImg [1];
			} else if (cb == JYLib.EnumCenter.EChooseButton.LoadCourse) {
				return tag == 0 ? BtnBgcImg [2] : BtnBgcImg [3];
			}
			return string.Empty;
		}
		private string[] BtnBgcImg = { "sure.png", "cancle.png", "biaoqing.png", "gaoqing.png" };

		public override void TouchesBegan (MonoTouch.Foundation.NSSet touches, UIEvent evt)
		{
			base.TouchesBegan (touches, evt);

			UITouch touch = touches.AnyObject as UITouch;
			if (touch != null) {
				if (btnA.Frame.Contains (touch.LocationInView (this))) {
					DoResult (btnA);
				}
				if (btnB.Frame.Contains (touch.LocationInView (this))) {
					DoResult (btnB);
				}
				if (btnC.Frame.Contains (touch.LocationInView (this))) {
					DoResult (btnC);
				}
			}
		}
		private void DoResult(GCForum.CCUIImage btnimg)
		{
			ResultTag = JYLib.FormatObject.GetInt (btnimg.CCValueString);
			Hide ();
			if (this.ImgTouched != null) //回调函数已经注册就执行
				this.ImgTouched (this, new ImgTouchEventArgs ());
		}

		/// <summary>
		/// 按钮返回值
		/// </summary>
		/// <value>The result tag.</value>
		public int ResultTag {
			get;
			set;
		}

		public void Hide ()
		{
			UIView.Animate (
				0.5, // duration
				() => { Alpha = 0; },
				() => { RemoveFromSuperview (); }
			);
		}

		//...

	}
}

具体调用:

/// <summary>
		/// 搜索操作
		/// </summary>
		private void BtnSearchClick(object sender, System.EventArgs e)
		{
			if (lc == null) {
				lc = new LoadingChoose (this.View.Bounds, JYLib.EnumCenter.EChooseButton.Confirm);
				lc.ImgTouched += new EventHandler<ImgTouchEventArgs> (LoadCourse); //注册事件
			} else {
				lc.Alpha = 1f;
			}
			this.View.AddSubview (lc);
		}
		private void LoadCourse(object sender, ImgTouchEventArgs e)
		{
			Tools.Alert (lc.ResultTag.ToString ());
		}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值