我可能會在這裏丟失一些東西,但是,當我手動取消選擇一行時,我無法讓Deselect
事件在我的自定義Element
類上觸發。我重寫了單元格以進行一些自定義繪圖,並且當單元格被選中/取消選擇時,我想更改字體的顏色。TableView.DeselectRow不觸發自定義元素的取消選擇事件
實際問題的一個工作示例詳述如下。
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);
}
}
我也曾嘗試在DialogViewController
重寫Deselected
事件本身,甚至創建自定義Source
,並在那裏重寫RowDeselected
事件,但它仍然不會被觸發。我得到它觸發的唯一方法是如果我刪除Tapped
處理程序並選擇一個不同的單元格。
要解決的問題是什麼,我此刻做的是手動迫使我打電話DeselectRow
後更新自己的元素,但是,我想知道爲什麼它不是觸發。
出現一些限制,那麼你不覺得嗎?正如你從所示的例子中可以看到的,有一些明顯的例子,你想在列表視圖中手動取消選擇一個項目。是否有另一種方法可以取消選擇列表中將*發送通知的項目? – James
其ios限制,而不是monotouchdialog。當出現tableView:didDeselectRowAtIndexPath:monotouch對話框調用了對目標元素的取消選擇的事件,但是當你調用tableView.DeselectRow(indexPath,false)時,tablesource不會接收tableView:didDeselectRowAtIndexPath:並且取消選中的事件不會被調用。您可以創建刪除選擇並調用元素的取消選擇事件的函數。 –
我不知道我明白你的意思是「*當出現tableView:didDeselectRowAtIndexPath:monotouch對話框被稱爲取消選定的事件爲目標元素*」? 'DeselectRow'在幕後調用本地'didDeselectRowAtIndexPath'。 – James