monodelvelop中运行后弹出指定xib窗体及显示分组数据
环境:苹果系统
开发工具:monodevelop xcode
开发语言:c#
疑问:如何在新建的monotouch空项目中 运行后弹出指定的xib窗体
解答:
1、首先添加新文件,选择ipad/iphone view controller,命名为mainwindows
2、在mainwindows中写入如下代码(使用UITableView显示分组数据,格式化代码快捷键Ctrl+i):
View Code
1 using System.Linq; 2 using System; 3 using System.Drawing; 4 using System.Globalization; 5 using System.Collections.Generic; 6 using MonoTouch.Foundation; 7 using MonoTouch.UIKit; 8 9 namespace tables03s { 10 11 struct Element 12 { 13 public string Number{get;set;} 14 public string Name{get;set;} 15 public string Symbol{get;set;} 16 public string Family{get;set;} 17 public string StartsWith{get{return Name.Substring(0,1);}} 18 } 19 public partial class mainWindows : UIViewController { 20 private List<Element> elements; 21 public mainWindows() : base ("mainWindows", null) { 22 23 elements = new List<Element> 24 { 25 new Element{Name="hydrogen",Number="1",Symbol="H",Family="Hydrogen"}, 26 new Element{Name="helium",Number="2",Symbol="He",Family="Noble gas"}, 27 new Element{Name="lithium",Number="3",Symbol="Li",Family="Alkali Metal"}, 28 new Element{Name="beryllium",Number="4",Symbol="Be",Family="Alkaline Earth"}, 29 new Element{Name="boron",Number="5",Symbol="B",Family="Boron"}, 30 new Element{Name="carbon",Number="6",Symbol="C",Family="Carbon"}, 31 new Element{Name="nitrogen",Number="7",Symbol="N",Family="Pnictide"}, 32 new Element{Name="oxygen",Number="8",Symbol="O",Family="Chalcogen"}, 33 new Element{Name="fluorine",Number="9",Symbol="F",Family="Halogen"}, 34 new Element{Name="neon",Number="10",Symbol="Ne",Family="Noble gas"}, 35 new Element{Name="sodium",Number="11",Symbol="Na",Family="Alkali Metal"}, 36 new Element{Name="magnesium",Number="12",Symbol="Mg",Family="Alkaline Earth"}, 37 new Element{Name="aluminum",Number="13",Symbol="Al",Family="Boron"}, 38 new Element{Name="silicon",Number="14",Symbol="Si",Family="Boron"} 39 40 }; 41 42 43 } 44 45 46 public override void DidReceiveMemoryWarning() { 47 // Releases the view if it doesn't have a superview. 48 base.DidReceiveMemoryWarning(); 49 50 // Release any cached data, images, etc that aren't in use. 51 } 52 53 public override void ViewDidLoad() { 54 base.ViewDidLoad(); 55 tableViews.Source=new MyTableViewSource(elements); 56 // tableViews.Source=new MyTableViewSource(elements); 57 // Perform any additional setup after loading the view, typically from a nib. 58 } 59 60 public override void ViewDidUnload() { 61 base.ViewDidUnload(); 62 63 // Clear any references to subviews of the main view in order to 64 // allow the Garbage Collector to collect them sooner. 65 // 66 // e.g. myOutlet.Dispose (); myOutlet = null; 67 68 ReleaseDesignerOutlets(); 69 } 70 71 public override bool ShouldAutorotateToInterfaceOrientation(UIInterfaceOrientation toInterfaceOrientation) { 72 // Return true for supported orientations 73 return (toInterfaceOrientation != UIInterfaceOrientation.PortraitUpsideDown); 74 } 75 76 private class MyTableViewSource:UITableViewSource 77 { 78 private List<string> sectionTitles; 79 private SortedDictionary<int,List<Element>> sectionElements 80 =new SortedDictionary<int, List<Element>>(); 81 public MyTableViewSource(List<Element> list) 82 { 83 sectionTitles=(from c in list select c.StartsWith).Distinct().ToList(); 84 sectionTitles.Sort(); 85 foreach(var element in list) 86 { 87 int sectionNum=sectionTitles.IndexOf(element.StartsWith); 88 if(sectionElements.ContainsKey(sectionNum)) 89 { 90 sectionElements[sectionNum].Add(element); 91 } 92 else 93 { 94 sectionElements.Add(sectionNum,new List<Element>{element}); 95 } 96 97 } 98 99 } 100 public override int NumberOfSections(UITableView tableView) { 101 return sectionTitles.Count; 102 } 103 public override string TitleForHeader(UITableView tableView, int section) { 104 return sectionTitles[section]; 105 } 106 public override string[] SectionIndexTitles(UITableView tableView) { 107 return sectionTitles.ToArray(); 108 } 109 public override int RowsInSection(UITableView tableview, int section) { 110 return sectionElements[section].Count; 111 } 112 public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath) { 113 114 string kCellIdetifier="mycell"; 115 UITableViewCell cell=tableView.DequeueReusableCell(kCellIdetifier); 116 if(cell==null) 117 { 118 cell=new UITableViewCell(UITableViewCellStyle.Value2,kCellIdetifier); 119 } 120 Element display=sectionElements[indexPath.Section][indexPath.Row]; 121 cell.TextLabel.Text=display.Symbol; 122 cell.DetailTextLabel.Text=display.Name; 123 cell.DetailTextLabel.Font=UIFont.SystemFontOfSize(20); 124 return cell; 125 } 126 public override void RowSelected(UITableView tableView, NSIndexPath indexPath) { 127 Element display=sectionElements[indexPath.Section][indexPath.Row]; 128 ShowAlert("RowSelected","You selected "+display.Name); 129 tableView.DeselectRow(indexPath,true); 130 } 131 public void ShowAlert(string title,string message) 132 { 133 using (var alert=new UIAlertView(title,message,null,"OK",null)) 134 { 135 alert.Show(); 136 } 137 } 138 } 139 } 140 141 }
3、在AppDelegate中写入如下代码,主要调用了window的RootViewController属性:
View Code
1 public partial class AppDelegate : UIApplicationDelegate { 2 // class-level declarations 3 UIWindow window; 4 mainWindows mainUiwindows; 5 // 6 // This method is invoked when the application has loaded and is ready to run. In this 7 // method you should instantiate the window, load the UI into it and then make the window 8 // visible. 9 // 10 // You have 17 seconds to return from this method, or iOS will terminate your application. 11 // 12 public override bool FinishedLaunching(UIApplication app, NSDictionary options) { 13 window = new UIWindow(UIScreen.MainScreen.Bounds); 14 mainUiwindows=new mainWindows(); 15 window.RootViewController=mainUiwindows; //important 16 window.MakeKeyAndVisible(); 17 return true; 18 } 19 }
4、效果图如下: