photo credit: Kat Northern Lights Man via photopin cc
こんばんは、ボーノです。
Xcodeで電話アプリを作っていて、電話番号を090XXXXYYYYから090-XXXX-YYYYに変換する必要がありました。
ググってもあまり良いページがなかったので、残しておきます。
やりたかったこと
アプリ上でアドレス帳から電話場号を引用し、電話をかけたいです。
ただし、一つだけポイントがある。 アドレス帳に入っているデータは090XXXXYYYYという形式です。
一方、Xcodeで電話をかけるためには090-XXXX-YYYYというように、ハイフンを入れなければ電話番号として認識してくれないです。
そのため、電話番号の間にハイフンを入れるための変換が必要です。
090XXXXYYYYから090-XXXX-YYYYに変換するためのコード
前提
- あるタイミング(例えばボタンが押された時)でphoneCallメソッドを呼び出す
- delegateには電話番号numberが入っている
- 携帯電話と一般電話で桁数が異なるので、ifで分ける
- (void)phoneCall { AppDelegate delegate = (AppDelegate )[[UIApplication sharedApplication] delegate]; NSString phone = delegate.number; NSString phrase = @"-"; NSString separatedPhone; if(phone.length == 11){ //for cell phone NSString phone1 = [phone substringToIndex:3]; NSString phone2 = [phone substringWithRange:NSMakeRange(3, 4)]; NSString phone3 = [phone substringFromIndex:7]; separatedPhone = [[[[phone1 stringByAppendingString:phrase]stringByAppendingString:phone2]stringByAppendingString:phrase]stringByAppendingString:phone3]; }else{ //other phone NSString phone1 = [phone substringToIndex:3]; NSString phone2 = [phone substringWithRange:NSMakeRange(3, 3)]; NSString phone3 = [phone substringFromIndex:6]; separatedPhone = [[[[phone1 stringByAppendingString:phrase]stringByAppendingString:phone2]stringByAppendingString:phrase]stringByAppendingString:phone3]; } NSURL url = [NSURL URLWithString:[NSString stringWithFormat:@"tel:%@",separatedPhone]]; [[UIApplication sharedApplication] openURL:url]; }
解説
今回は、文字列の操作ということでNSStringのメソッドが多用してあります。
substringToIndex:N
これは、文字列を頭からN+1番目の文字まで切り取るというメソッド。
今回は、phoneという変数の頭から3文字目、つまりは090の部分を抜き出しています。
substringWithRange:NSMakeRange(N,M)
これは、ある変数のN+1番目から、M文字切り取るというメソッド。
今回の場合、4番目から4文字を切り取っており、つまりはXXXXの部分を取得していることになります。
substringFromIndex:N
これはsubstringToIndexと似ているが、少し異なります。
これは、N+1番目の文字から最後までを取得するメソッドです。
今回の場合は、YYYYの部分を取得しています。
後は
上記のメソッドより抜き出した文字列を、ハイフンを間に挟んで連結させるだけです。
なお、ここでは携帯電話だけでなく、一桁少ない固定電話に対してのコードも記載してあります。
ご参考までに。
参考サイト
いつものサイト、iPhoneアプリ開発の虎の巻のNSStringのページです。
まだまだNSStringには色んな使い方があります。