iOS

UIAlertViewのキーボードタイプを変える

iPhoneアプリでユーザに確認を求める場合等によくUIAlertViewを使います。


UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"削除の確認"
                                                    message:@"本当に削除してもいいですか?"
                                                   delegate:self
                                          cancelButtonTitle:@"はい"
                                          otherButtonTitles:@"いいえ", nil];
[alertView show];

confirm.png

CoreTextを調べてみた

CoreTextというのは、OSXやiOSで使えるテキスト描画用のフレームワークです。

iOS3.2の頃から使えていたらしいので特に新しいフレームワークというわけではありません。またiOSの場合はUIKitがテキスト描画もいい感じに面倒みてくれるのであまり使う機会もないように思います。

ただし、CoreGraphicsを使って画像を出力する目的でビットマップコンテキストへ日本語を描画しようとすると文字化けしてしまうので、そのような時にはCoreTextを使うと日本語も描画することができます。(画面への描画は日本語もちゃんと出力されます。また単にテキスト画像を生成する目的であれば、iPhoneで利用できるフォントを調べる(その2)で使ったやり方でも日本語の出力が可能(しかも簡単!)ですが、画像や文字を一緒にビットマップコンテキストへ描画する場合は、CoreTextフレームワークを使った方が便利です。またCoreTextを使うと、矩形だけでなく任意のパスを指定してその範囲に文字列を描画することができます。)

 

文字化けについてどういうことかというと、英数字等の半角文字は次のようにしてそのままビットマップコンテキストに描画できます。

NSAttributedStringを使ってみる

NSAttributedStringを使うと文字列を装飾して描画することができます。

使いたい属性をNSDictionaryに設定して、NSAttributedStringのインスタンスを生成することで属性付きの文字列を使うことができます。

後から属性を追加したり変更する場合は、NSMutableAttributedStringの方を使います。

 

NSAttributedString UIKit Additions Referenceを見るとiPhoneで使える属性として以下のようなものがあるようです。

 

iPhoneアプリの国際化

アプリをつくる時には国際化のことも考えないといけません。

App Store は、150 を超える国で利用され、40 を超える言語をサポートしているとのことですが、これら全ての言語をサポートするのは無理としても、日本語の他にせめて、英語ぐらいはサポートしておきたいところです。

 

最初からiPhoneアプリを国際化するつもりでいる場合は、通常、アプリで使用するメッセージ類は全て英語で書いておいて、後からそれらに対応する翻訳用のファイルを用意することで対応します。C言語等で利用するgettextとpoファイルの関係に似ています。

デフォルトの言語を英語にしておけば 、翻訳していない言語でアプリが使用される場合は英語で表示されることになります。

 

国際化する場合は、まずXCodeのプロジェクトの設定で、ターゲットの言語を追加します。

ss1.png

プロジェクトで使用中のストーリーボードや文字列リソースの一覧が表示されるので、翻訳するファイルを選びます。