选择RadioGroup项目时解除弹出窗口

时间:2011-12-02 23:24:30

标签: monotouch.dialog

现在在我的一些项目中使用了很棒的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并捕获所选事件,但后来我仍然不确定如何解除自动选择弹出窗口?

1 个答案:

答案 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;
}