我可能在这里遗漏了一些东西,但是,当我手动取消选择一行时,我无法Deselect
在我的自定义类上触发事件。Element
我正在覆盖单元格以进行一些自定义绘图,并且我想在选择/取消选择单元格时更改字体的颜色。
下面详细介绍了实际问题的工作示例。
public class TestViewController : DialogViewController
{
public TestViewController () : base(UITableViewStyle.Plain, null, true)
{
Root = new RootElement(null);
var section = new Section();
for (int i = 0; i <= 10; i++)
{
var element = new MyCustomElement();
element.Tapped += (dvc, tableView, indexPath) => {
var sheet = new UIActionSheet("", null, "Cancel", null, null);
sheet.Dismissed += delegate(object sender, UIButtonEventArgs e) {
tableView.DeselectRow(indexPath, false);
};
sheet.ShowInView(View);
};
section.Add (element);
}
Root.Add (section);
}
}
public class MyCustomElement : Element, IElementSizing {
static NSString mKey = new NSString ("MyCustomElement");
public MyCustomElement () : base ("")
{
}
public MyCustomElement (Action<DialogViewController,UITableView,NSIndexPath> tapped) : base ("")
{
Tapped += tapped;
}
public override UITableViewCell GetCell (UITableView tv)
{
var cell = tv.DequeueReusableCell (mKey);
if (cell == null)
cell = new UITableViewCell (UITableViewCellStyle.Default, mKey);
return cell;
}
public float GetHeight (UITableView tableView, NSIndexPath indexPath)
{
return 65;
}
public event Action<DialogViewController, UITableView, NSIndexPath> Tapped;
public override void Selected (DialogViewController dvc, UITableView tableView, NSIndexPath path)
{
Console.WriteLine("Selected!");
if (Tapped != null)
Tapped (dvc, tableView, path);
}
public override void Deselected (DialogViewController dvc, UITableView tableView, NSIndexPath path)
{
// does not trigger when deselect manually invoked
Console.WriteLine("Deselected!");
base.Deselected (dvc, tableView, path);
}
}
我也尝试过覆盖Deselected
事件DialogViewController
本身,甚至创建一个自定义Source
并覆盖其中的RowDeselected
事件,但它仍然没有被触发。触发它的唯一方法是删除Tapped
处理程序并选择不同的单元格。
为了解决这个问题,我目前正在做的是手动强制元素在我调用后自行更新DeselectRow
,但是,我想知道为什么它没有触发。