现在在我的一些项目中使用了很棒的MonoTouch.dialog并且有一个问题。我有一个RadioGroup,我用它来允许用户选择他的home状态,States是一个字符串数组。
public static RootElement CreateStates ()
{
return new RootElement ("State", new RadioGroup (0))
{
new Section ("Choose State")
{
from x in States
select (Element) new RadioElement (x)
}
};
}
这样可以正常工作,当我选择状态时弹出窗口出现并选择我的状态,但是我必须点击导航栏中的后退按钮才能返回主屏幕。当我选择一个选项时,有没有办法让弹出窗口消失?必须按下后退按钮很烦人。或者我只是完全使用了错误的解决方案?
我的第一个想法是继承RadioElement并捕获所选事件,但后来我仍然不确定如何解除自动选择弹出窗口?
答案 0 :(得分:13)
我今天早上遇到了同样的问题,我也想触发一个事件进行更改,这样我就可以在编辑数据时在对话框上添加一个“取消”按钮。这两个任务都要求你子类化RadioElement并覆盖Selected方法 - 注意额外的步骤,以确保如果用户点击已经选择的项目,对话框不会关闭 - 如果你点击任何东西就会触发它,即使它已被选中所以我想要防止这种情况 - 我的看起来像这样。
public class MyRadioElement : RadioElement {
// Pass the caption through to the base constructor.
public MyRadioElement (string pCaption) : base(pCaption) {
}
// Fire an event when the selection changes.
// I use this to flip a "dirty flag" further up stream.
public override void Selected (
DialogViewController pDialogViewController,
UITableView pTableView, NSIndexPath pIndexPath) {
// Checking to see if the current cell is already "checked"
// prevent the event from firing if the item is already selected.
if (GetActiveCell().Accessory.ToString().Equals(
"Checkmark",StringComparison.InvariantCultureIgnoreCase)) {
return;
}
base.Selected (pDialogViewController, pTableView, pIndexPath);
// Is there an event mapped to our OnSelected event handler?
var selected = OnSelected;
// If yes, fire it.
if (selected != null) {
selected (this, EventArgs.Empty);
}
// Close the dialog.
pDialogViewController.DeactivateController(true);
}
static public event EventHandler<EventArgs> OnSelected;
}