使用MonoDevelop,我一直在使用FlyoutNavigationController查看侧滑板菜单的IOS实现,但是遇到了几个绊脚石。
首先,如何访问生成的elements
的字体list
?
我可以轻松修改行高等,但我不确定如何继续修改list
项,可以使用tablesource
和项styling
来解决这个问题吗?
其次,如何从此列表中打开视图? 目前默认使用空视图,但是从侧面菜单列表中打开新视图,我尝试使用推送导航控制器,但无法打开。
任何想法都非常受欢迎。
navigation = new FlyoutNavigationController();
navigation.View.Frame = UIScreen.MainScreen.Bounds;
View.AddSubview(navigation.View);
navigation.NavigationRoot = new RootElement ("Menu List")
{
new Section ("Menu List")
{
from page in SlideList
select new StringElement (page.title) as Element
}
};
navigation.NavigationTableView.BackgroundColor = UIColor.DarkGray;
navigation.NavigationTableView.RowHeight = 30;
navigation.NavigationTableView.SeparatorStyle = UITableViewCellSeparatorStyle.SingleLine;
navigation.NavigationTableView.SeparatorColor = UIColor.LightGray;
navigation.NavigationTableView.SectionHeaderHeight = 60;
//navigation.NavigationTableView.DataSource = SlideList;
//navigation.ViewControllers = Array.ConvertAll (MenuItems, title => new UINavigationController (new TaskPageController (navigation, title)));
navigation.ViewControllers = Array.ConvertAll (MenuItems, title => new TaskPageController (navigation, title));
this.NavigationItem.LeftBarButtonItem = new UIBarButtonItem (UIBarButtonSystemItem.Action, delegate {
navigation.ToggleMenu();
});
答案 0 :(得分:2)
之前我没有使用过FlyOutNavigationController,但我看了一下这个例子: https://github.com/xamarin/FlyOutNavigation
看起来你应该拥有与控制器相同数量的StringElements。对于ViewControllers数组,看起来您可以提供自己的自定义控制器,而不仅仅是普通的ViewControllers。之后,单击列表项应自动导航到相应的控制器。
关于样式,查看此NavigationController的源代码,我没有看到能够对单元格进行样式化。我快速搜索了如何设置MonoTouch对话框列表的样式,看起来没有子类化元素的简单方法:
Monotouch Dialog: Styling Elements
但是,我可以与您分享我如何在没有Dialog框架的情况下完成您提出的两个问题。
您可以创建一个扩展UITableViewSource的自定义类: http://docs.xamarin.com/guides/ios/user_interface/tables/part_2_-_populating_a_table_with_data
在GetCell方法覆盖中,您可以获取单元格标签的实例并设置字体,如下所示:
cell.TextLabel.Font = UIFont.FromName("TitlingGothicFB Cond", 20);
您可以使用自定义UITableViewSource类执行的另一项操作是创建自定义事件:
public event EventHandler ListItemSelected;
在RowSelected方法中,您可以调度此事件:
public override void RowSelected (UITableView tableView, MonoTouch.Foundation.NSIndexPath indexPath)
{
ListItemSelected(this, new MyCustomEventArgs(indexPath.Row));
}
在负责实例化此TableSource的控制器类中,您可以像这样监听和处理此事件:
var customTableSource = new CustomTableSource(myList);
MyTable.Source = customTableSource;
customTableSource.ListItemSelected += (object sender, EventArgs e) => {
if((e as MyCustomEventArgs).rowSelected == 1){
this.NavigationController.PushViewController(new MyNextViewController(), true));
}
}