歡迎你們加入如下開源社區ios
Xamarin-Cn:https://github.com/Xamarin-Cngit
Mvvmcross-Cn:https://github.com/Mvvmcross-Cn github
(另外微信訂閱號 Xamarin 全部者@善友兄也給予了運營權限,後面將開始陸續運營起來,給你們推送相關的文章)微信
本人利用業餘的時間編寫了關於Xamarin.Android的基礎教程,得到了不少人的支持。可是筆者打內心想說的就是這個教程所能提供的知識太有限了,等筆者到新的工做後,會開始抓緊時間寫一些實戰開發中運用的技術以及技巧。如今筆者帶着你們進入Xamarin.IOS的入門教程。ide
若是讀者是破解的,那麼mac這邊的破解可能會傷腦筋,筆者使用的商業版的帳號。固然我這裏建議你們能夠到淘寶購買,其實商業版若是以學校機構購買很便宜的。關於環境的講解就到這吧,下面開始正題(這裏推薦一個比較好的QQ羣【230865920】)工具
不知道你們有沒人卡在這,並非mac端安裝完畢,vs就能夠鏈接。這裏還須要一個過程,筆者在這裏簡單的介紹下。ui
首先咱們在mac端找到這個應用打開:this
而後呈現的界面以下所示:編碼
這個時候咱們點擊Pair以後出現下面這個界面:url
其中的這串字符是須要在VS那邊進行匹配的時候輸入的,在沒有匹配前不要點擊close。這樣mac端的就完成了,下面咱們轉戰到vs中。
打開vs後點擊「工具」->「選項」->「Xamarin」->「iOS Settings」顯示以下的界面:
這個時候咱們點擊「Find Mac Build Host」以後出現下面這個界面:
直接點擊Continue,進入到主界面:
這裏筆者知道mac的ip地址,因此直接點擊「Configure Host Manually」,輸入ip地址並肯定。而後等待鏈接,鏈接完成後彈出這個窗口:
在其中輸入mac中的字符便可。
如今咱們開始進入正文,首先咱們經過VS建立一個IOS項目,具體過程以下所示:
新建完項目後打開下面的這個界面(後面跟UI相關的操做咱們都會在這個文件中進行操做)
打開以後咱們從工具欄選擇一個「Label」控件放入其中並修改對應的文字,以下所示:
接着再拖放一個「Text Field」控件放在Label下方,而且寬度同樣。並在屬性窗口的Placeholder屬性中輸入「1-855-XAMARIN」。而且在Identity下的Name中輸入「PhoneNumberText」,這個名字會致使自動生成控件的命名,相似於ASP.NET中的ID屬性。下面咱們接着拖放一個按鈕並設置其Name爲「TranslateButton」:
最後放入一個按鈕並設置Name爲「CallButton」:
這樣咱們就完成了整個界面的設計了。下面咱們就要開始具體的編碼了,首先咱們新建一個cs文件,而且在其中輸入如下的代碼:
1 public static class PhoneTranslator 2 { 3 public static string ToNumber(string raw) 4 { 5 if (string.IsNullOrEmpty(raw)) 6 { 7 return ""; 8 } 9 else 10 { 11 raw = raw.ToUpperInvariant(); 12 } 13 14 var newNumber = new StringBuilder(); 15 foreach (var c in raw) 16 { 17 if (" -0123456789".Contains(c)) 18 { 19 newNumber.Append(c); 20 } 21 else 22 { 23 var result = TranslateToNumber(c); 24 if (result != null) 25 newNumber.Append(result); 26 } 27 } 28 return newNumber.ToString(); 29 } 30 31 static bool Contains(this string keyString,char c) 32 { 33 return keyString.IndexOf(c) >= 0; 34 } 35 36 static int? TranslateToNumber(char c) 37 { 38 if ("ABC".Contains(c)) 39 { 40 return 2; 41 } 42 else if ("DEF".Contains(c)) 43 { 44 return 3; 45 } 46 else if("GHI".Contains(c)) 47 { 48 return 4; 49 } 50 else if("JKL".Contains(c)) 51 { 52 return 5; 53 } 54 else if("MNO".Contains(c)) 55 { 56 return 6; 57 } 58 else if("PQRS".Contains(c)) 59 { 60 return 7; 61 } 62 else if("TUV".Contains(c)) 63 { 64 return 8; 65 } 66 else if("WXYZ".Contains(c)) 67 { 68 return 9; 69 } 70 return null; 71 } 72 }
接着咱們打開RootViewController文件並在ViewDidLoad中完成剩餘功能的開發,首先咱們定義一個字符串用來保存最終須要撥打的電話號碼並未Translate按鈕綁定監聽事件,在點擊的時候改變Call按鈕的文字,顯示須要撥打的電話:
1 string translatedNumber = ""; 2 TranslateButton.TouchUpInside += (e, s) => 3 { 4 //將輸入的文字轉換爲號碼 5 translatedNumber = PhoneTranslator.ToNumber(PhoneNumberText.Text); 6 7 //關閉鍵盤 8 PhoneNumberText.ResignFirstResponder(); 9 10 if (translatedNumber == "") 11 { 12 CallButton.SetTitle("Call", UIControlState.Normal); 13 CallButton.Enabled = false; 14 } 15 else 16 { 17 CallButton.SetTitle("Call " + translatedNumber, 18 UIControlState.Normal); 19 CallButton.Enabled = true; 20 } 21 };
完成了第一個按鈕開發以後咱們繼續下一個按鈕,這個按鈕將會完成撥打電話的功能,若是電話撥打失敗則會彈出提示:
1 CallButton.TouchUpInside += (e, s) => 2 { 3 //建立NSUrl並經過SharedApplication打開 4 var url = new NSUrl("tel:" + translatedNumber); 5 if(!UIApplication.SharedApplication.OpenUrl(url)) 6 { 7 //撥打失敗則彈出提示框 8 var alert = UIAlertController.Create("Not supported", 9 "Scheme 'tel:' is not supported on this device", 10 UIAlertControllerStyle.Alert); 11 alert.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, null)); 12 PresentViewController(alert, true, null); 13 } 14 };
其中咱們須要經過構建NSUrl來指定須要撥打的電話,這裏跟Android的方式很類似,在Android中就是同構構建Intent來實現,而後用過UIApplication中的SharedApplication打開這個NSUrl,若是撥打失敗則會利用UIAlertController構建一個提示框,這裏咱們經過Create指定對話框的標題、內容以及樣式,而後再經過AddActiontian添加一個按鈕。最後經過PresentViewConroller打開。
最後咱們還須要設置應用的圖標以及緩衝圖片,這裏咱們須要右擊項目屬性並點擊IOS Application,咱們能夠看到須要設置多個圖標,而且在緩衝界面部分須要制定三張圖。這裏筆者能夠經過官方的地址下載圖片資源
最後的成品界面以下所示:
在撥打時候的時候彈出以下的對話框: