Xamarin.ios MonoTouch消息元素使用字符串元素操作页面
我有以下代码:Xamarin.ios MonoTouch消息元素使用字符串元素操作页面,xamarin.ios,monotouch.dialog,Xamarin.ios,Monotouch.dialog,我有以下代码: Section _section = new Section ("Test"); foreach (ExampleData data in Example.data) { MessageElement Item = new MessageElement (){ Sender = data.Name, Subject = data.Value, Body = data.Description, Date = data.Modifie
Section _section = new Section ("Test");
foreach (ExampleData data in Example.data) {
MessageElement Item = new MessageElement (){
Sender = data.Name,
Subject = data.Value,
Body = data.Description,
Date = data.Modified
} ;
_section.Add(Item);
var root = new RootElement("Item Expanded"){
new Section ("test2"){
new StringElement("Field Name", data.FieldName),
new StringElement("Value", data.Value),
new StringElement("Description", data.Description)
}
} ;
_section.Add(root);
} ;
var _rootElement = new RootElement ("Items") {
_section
} ;
我希望这样做的方式是,当点击一个消息元素时,它会显示带有(“test2”)的部分,该部分具有相同的数据(例如,数据是在相同的循环运行期间添加的)。我意识到这在当前不会发生,因为它似乎是消息元素
需要一个动作委托在点击事件上执行任何操作,而且我正在将所有内容添加到同一部分。但是,有没有办法用消息元素复制多个嵌套根元素和节的行为?如果我创建新页面/屏幕并尝试以这种方式进行转换,导航控制器将停止工作,我将无法使用“后退”按钮,即使“按下”设置为true。不确定您到底想要什么。将“Item Expanded”(项目扩展)根元素代码替换为该代码,以使用backbutton按钮在导航堆栈上推送对话框viewcontoller。当然,您的DialogViewcontroller首先应该位于UINavigation控制器中,这样才能正常工作
Item.Tapped += delegate(DialogViewController arg1, UITableView arg2, NSIndexPath arg3)
{
var newDialogVC = new DialogViewController(
UITableViewStyle.Grouped,
new RootElement("Item Expanded")
{
new Section ("test2"){
new StringElement("Field Name", "test"),
new StringElement("Value", "test"),
new StringElement("Description", "test")
}
}
, true);
arg1.NavigationController.PushViewController(newDialogVC,true);
};
是否尝试在点击/单击事件时将节动态添加到根元素?而且,这不是iOS的方式。它更倾向于“推动”而不是扩展。我在这里的示例代码中谈到嵌套:这被认为是不好的做法吗?我想我误解了你,我仍然不清楚你想要发生什么。说得太快了。循环中的最后一个元素最终添加到每个消息元素的委托中的每个字符串元素。这就像它们是通过ByRef而不是ByVal传递的一样。您可能应该将循环更改为for循环,然后通过索引示例引用委托中的数据。数据[i]。字段名。这是因为委托仅在点击消息时执行。当时foreach,oop已经完成,数据是最后一个元素,当实际点击该项时,会导致索引超出范围异常。如果不知道上下文并查看代码,很难解决此问题。您应该将数据数组/集合作为类变量(而不是局部变量)存储和引用。当委托执行时,viewdidload已经完成。通过使用Example.Data[arg3.Row].FieldName获得它。再次感谢!