有不明白的地方欢迎入群 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 ());
}