我正在使用iPad
创建MonoTouch 2.10.11
应用,我希望MonoTouch.Dialog
在表单上创建一些可编辑字段。其中一个字段将使用RadioGroup
来允许用户从选项列表中进行选择。 M.T.D
的默认行为是在现有表上显示选择列表表。这适用于iPhone
布局,但在此iPad
表单上,表格仅位于表单的小区域,导航栏在表单中间看起来很奇怪。我想将选择显示为全屏模式,用户将点击“返回”按钮返回上一个表单和所选项目。
我创建了一个新的RootElement
后代类,如下所示:
public class ModalRootElement : RootElement
{
public override void Selected (DialogViewController dvc, UITableView tableView, NSIndexPath path)
{
tableView.DeselectRow (path, false);
UIViewController uIViewController = this.MakeViewController ();
this.PrepareDialogViewController (uIViewController);
dvc.PresentViewController (uIViewController, true, null);
}
protected override void PrepareDialogViewController(UIViewController dvc)
{
base.PrepareDialogViewController(dvc);
UIButton button = UIButton.FromType (UIButtonType.RoundedRect);
button.Frame = new RectangleF (5, 5, 80, 20);
button.SetTitle ("back", UIControlState.Normal);
button.TouchUpInside += delegate {
DialogViewController d = dvc as DialogViewController;
(d.Root as ModalRootElement).TableView.ReloadData ();
d.DeactivateController(true);
};
dvc.View.AddSubview (button);
}
}
该表使用以下代码实现:
var _status = new ModalRootElement("Status", new RadioGroup("status", -1)) {
(new Section() {
new RadioElement("New", "status"),
new RadioElement("In process", "status"),
new RadioElement("Rejected", "status"),
new RadioElement("Deferred", "status"),
new RadioElement("Transferred", "status"),
new RadioElement("Unknown", "status"),
new RadioElement("Complete", "status")
})
};
var _odom = new EntryElement ("Odometer", "current odom", "");
_odom.KeyboardType = UIKeyboardType.DecimalPad;
_odom.TextAlignment = UITextAlignment.Right;
var root = new RootElement ("back") {
new Section("") {
_status,
_odom
}
};
_dvc = new DialogViewController(root);
_nav = new UINavigationController (_dvc);
_nav.SetNavigationBarHidden (true, false);
当我运行应用程序时,我可以深入RadioGroup
并进行选择。单击我添加到视图中的后退按钮时,模式视图将关闭,RadioSelected
对象的ModalRootElement
属性设置正确,但不显示文本。
如果我更改Selected()
方法来调用dvc.ActivateController
而非PresentViewController
,则ModalRootElement
会显示正确的文字,但RadioGroup
表的大小错误。有没有办法让RootElement
在您使用PresentViewController
而不是ActivateController
时显示正确的文字?
答案 0 :(得分:0)
我认为您需要Root.Reload()调用。