Flyout导航控制器

时间:2013-05-10 14:40:05

标签: c# xamarin.ios navigation monodevelop

使用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();
});

1 个答案:

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