-
Notifications
You must be signed in to change notification settings - Fork 7
1_ Xamarin.iOS
Yoshito Tabuchi edited this page Jun 8, 2018
·
4 revisions
using System;
using System.Text;
namespace Core
{
public static class PhonewordTranslator
{
public static string ToNumber(string raw)
{
if (string.IsNullOrWhiteSpace(raw))
return "";
else
raw = raw.ToUpperInvariant();
var newNumber = new StringBuilder();
foreach (var c in raw)
{
if (" -0123456789".Contains(c))
newNumber.Append(c);
else {
var result = TranslateToNumber(c);
if (result != null)
newNumber.Append(result);
}
// 数字以外の文字はスキップします。
}
return newNumber.ToString();
}
static bool Contains (this string keyString, char c)
{
return keyString.IndexOf(c) >= 0;
}
static int? TranslateToNumber(char c)
{
if ("ABC".Contains(c))
return 2;
else if ("DEF".Contains(c))
return 3;
else if ("GHI".Contains(c))
return 4;
else if ("JKL".Contains(c))
return 5;
else if ("MNO".Contains(c))
return 6;
else if ("PQRS".Contains(c))
return 7;
else if ("TUV".Contains(c))
return 8;
else if ("WXYZ".Contains(c))
return 9;
return null;
}
}
}
TranslateButton の処理を追加:
string translatedNumber = "";
TranslateButton.TouchUpInside += (object sender, EventArgs e) =>
{
// PhoneTranslator.csを使用してテキストから電話番号に変換します
translatedNumber = Core.PhonewordTranslator.ToNumber(PhoneNumberText.Text);
// TextFieldがタップされたらキーボードをDismissします
PhoneNumberText.ResignFirstResponder();
if (translatedNumber == "")
{
CallButton.SetTitle("Call", UIControlState.Normal);
CallButton.Enabled = false;
}
else
{
CallButton.SetTitle("Call " + translatedNumber, UIControlState.Normal);
CallButton.Enabled = true;
}
};
CallButton の処理を追加:
CallButton.TouchUpInside += (object sender, EventArgs e) =>
{
var url = new NSUrl("tel:" + translatedNumber);
// 標準の電話アプリを呼び出すためにtel:のプリフィックスでURLハンドラーを使用します
// できない場合はAlertViewを呼び出します。
if (!UIApplication.SharedApplication.OpenUrl(url))
{
var av = new UIAlertView("Not supported",
"Scheme 'tel:' is not supported on this device",
null,
"OK",
null);
av.Show();
}
};
using Foundation;
using System;
using UIKit;
namespace Phoneword.iOS
{
public partial class ViewController : UIViewController
{
public ViewController(IntPtr handle) : base(handle)
{
}
public override void ViewDidLoad()
{
base.ViewDidLoad();
string translatedNumber = "";
TranslateButton.TouchUpInside += (object sender, EventArgs e) =>
{
// PhoneTranslator.csを使用してテキストから電話番号に変換します
translatedNumber = Core.PhonewordTranslator.ToNumber(PhoneNumberText.Text);
// TextFieldがタップされたらキーボードをDismissします
PhoneNumberText.ResignFirstResponder();
if (translatedNumber == "")
{
CallButton.SetTitle("Call", UIControlState.Normal);
CallButton.Enabled = false;
}
else
{
CallButton.SetTitle("Call " + translatedNumber, UIControlState.Normal);
CallButton.Enabled = true;
}
};
CallButton.TouchUpInside += (object sender, EventArgs e) =>
{
var url = new NSUrl("tel:" + translatedNumber);
// 標準の電話アプリを呼び出すためにtel:のプリフィックスでURLハンドラーを使用します
// できない場合はAlertViewを呼び出します。
if (!UIApplication.SharedApplication.OpenUrl(url))
{
var av = new UIAlertView("Not supported",
"Scheme 'tel:' is not supported on this device",
null,
"OK",
null);
av.Show();
}
};
}
public override void DidReceiveMemoryWarning()
{
base.DidReceiveMemoryWarning();
// Release any cached data, images, etc that aren't in use.
}
}
}
using System;
using Foundation;
using UIKit;
using System.Collections.Generic;
namespace Phoneword.iOS
{
public partial class CallHistoryController : UITableViewController
{
public List<string> PhoneNumbers { get; set; }
static NSString callHistoryCellId = new NSString ("CallHistoryCell");
public CallHistoryController (IntPtr handle) : base (handle)
{
TableView.RegisterClassForCellReuse (typeof(UITableViewCell), callHistoryCellId);
TableView.Source = new CallHistoryDataSource (this);
PhoneNumbers = new List<string> ();
}
class CallHistoryDataSource : UITableViewSource
{
CallHistoryController controller;
public CallHistoryDataSource (CallHistoryController controller)
{
this.controller = controller;
}
// テーブルの各セクションの行数を返します
public override nint RowsInSection (UITableView tableView, nint section)
{
return controller.PhoneNumbers.Count;
}
// NSIndexPathのRowプロパティで指定された行のテーブルセルを返します
// このメソッドは、表の各行を挿入するために複数回呼び出されます
// このメソッドは自動的に画面外にスクロールしたCellを使用または必要に応じて新しいものを作成します
public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
{
var cell = tableView.DequeueReusableCell (CallHistoryController.callHistoryCellId);
int row = indexPath.Row;
cell.TextLabel.Text = controller.PhoneNumbers[row];
return cell;
}
}
}
}
using 追加
using System.Collections.Generic;
クラス変数追加
// translatedNumberをViewDidLoad()から移動します
string translatedNumber = "";
public List<string> PhoneNumbers { get; set; }
コンストラクター内でList初期化
// Call History画面用に電話番号のListを初期化します
PhoneNumbers = new List<string>();
CallButton編集
// 変換した電話番号をPhoneNumbersに追加します
PhoneNumbers.Add(translatedNumber);
var alert = UIAlertController.Create("Not supported", "Scheme 'tel:' is not supported on this device", UIAlertControllerStyle.Alert);
alert.AddAction(UIAlertAction.Create ("Ok", UIAlertActionStyle.Default, null));
PresentViewController(alert, true, null);
PrepareForSegue追加
public override void PrepareForSegue(UIStoryboardSegue segue, NSObject sender)
{
base.PrepareForSegue(segue, sender);
// set the View Controller that’s powering the screen we’re
// transitioning to
var callHistoryContoller = segue.DestinationViewController as CallHistoryController;
//set the Table View Controller’s list of phone numbers to the
// list of dialed phone numbers
if (callHistoryContoller != null)
{
callHistoryContoller.PhoneNumbers = PhoneNumbers;
}
}
using Foundation;
using System;
using UIKit;
using System.Collections.Generic;
namespace Phoneword.iOS
{
public partial class ViewController : UIViewController
{
// translatedNumberをViewDidLoad()から移動します
string translatedNumber = "";
public List<string> PhoneNumbers { get; set; }
public ViewController(IntPtr handle) : base(handle)
{
// Call History画面用に電話番号のListを初期化します
PhoneNumbers = new List<string>();
}
public override void ViewDidLoad()
{
base.ViewDidLoad();
TranslateButton.TouchUpInside += (object sender, EventArgs e) =>
{
// PhoneTranslator.csを使用してテキストから電話番号に変換します
translatedNumber = Core.PhonewordTranslator.ToNumber(PhoneNumberText.Text);
// TextFieldがタップされたらキーボードをDismissします
PhoneNumberText.ResignFirstResponder();
if (translatedNumber == "")
{
CallButton.SetTitle("Call", UIControlState.Normal);
CallButton.Enabled = false;
}
else
{
CallButton.SetTitle("Call " + translatedNumber, UIControlState.Normal);
CallButton.Enabled = true;
}
};
CallButton.TouchUpInside += (object sender, EventArgs e) =>
{
// 変換した電話番号をPhoneNumbersに追加します
PhoneNumbers.Add(translatedNumber);
var url = new NSUrl("tel:" + translatedNumber);
// 標準の電話アプリを呼び出すためにtel:のプリフィックスでURLハンドラーを使用します
// できない場合はAlertViewを呼び出します。
if (!UIApplication.SharedApplication.OpenUrl(url))
{
var alert = UIAlertController.Create("Not supported", "Scheme 'tel:' is not supported on this device", UIAlertControllerStyle.Alert);
alert.AddAction(UIAlertAction.Create("Ok", UIAlertActionStyle.Default, null));
PresentViewController(alert, true, null);
}
};
}
public override void PrepareForSegue(UIStoryboardSegue segue, NSObject sender)
{
base.PrepareForSegue(segue, sender);
// set the View Controller that’s powering the screen we’re
// transitioning to
var callHistoryContoller = segue.DestinationViewController as CallHistoryController;
//set the Table View Controller’s list of phone numbers to the
// list of dialed phone numbers
if (callHistoryContoller != null)
{
callHistoryContoller.PhoneNumbers = PhoneNumbers;
}
}
public override void DidReceiveMemoryWarning()
{
base.DidReceiveMemoryWarning();
// Release any cached data, images, etc that aren't in use.
}
}
}