FlyoutNavigation Controller

本文关键字:Controller FlyoutNavigation | 更新日期: 2023-09-27 18:12:57

使用MonoDevelop,我一直在寻找使用FlyoutNavigationController的侧边滑出菜单的IOS实现,但遇到了几个绊脚石。

首先,如何访问生成的list的字体elements ?
我可以很容易地修改行高等,但我不确定如何继续修改list项目,这可以与tablesourcestyling项目一起进行吗?

其次,如何从这个列表中打开一个视图?目前,默认情况下使用空视图,但新视图要从侧面菜单列表中打开,我尝试使用推送导航控制器,但它无法打开。

欢迎提出任何意见。

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

FlyoutNavigation Controller

我以前没有使用过FlyOutNavigationController,但是我看了一下这个例子:https://github.com/xamarin/FlyOutNavigation

看起来你应该有与控制器相同数量的stringelement。对于ViewControllers数组,看起来你可以提供你自己的自定义控制器,而不仅仅是普通的ViewControllers。之后,单击列表项将自动导航到相应的控制器。

关于样式,查看这个NavigationController的源代码,我没有看到太多关于能够对单元格进行样式化的内容。我做了一个快速搜索如何去样式MonoTouch对话框列表,它看起来没有一个简单的方法没有子类化元素:

Monotouch对话框:样式元素

但是,我可以和你分享我是如何在没有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));
     }
}