2013-05-10 45 views
2

使用MonoDevelop時,我一直在使用FlyoutNavigationController查看側滑出菜單的IOS實現,但遇到了一些絆腳石。FlyoutNavigation Controller

首先,您如何訪問生成的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(); 
}); 

回答

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)); 
    } 
} 
+0

謝謝,我會採取你已經概述的方法,並像對待表格視圖一樣轉向列表視圖的子類別。 – user2244553 2013-05-14 13:25:01

+0

@Ben,每個點擊單元格的項目,NavigationController推新視圖控制器? – ttotto 2014-11-28 14:31:06