FlyoutNavigation Controller
本文关键字:Controller FlyoutNavigation | 更新日期: 2023-09-27 18:12:57
使用MonoDevelop,我一直在寻找使用FlyoutNavigationController的侧边滑出菜单的IOS实现,但遇到了几个绊脚石。
首先,如何访问生成的list
的字体elements
?
我可以很容易地修改行高等,但我不确定如何继续修改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();
});
我以前没有使用过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));
}
}