読み込み中...

【Objective-C】UITextFieldの使い方10選

Objective-CでUITextFieldを使いこなす方法を紹介する記事のサムネイル Objctive-C
この記事は約26分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

プログラミングの世界では、多くの言語がそれぞれの用途に応じて使用されています。

iOSアプリケーション開発の場においても、Swiftに並ぶ古典的な言語としてObjective-Cが存在します。

本記事では、Objective-Cを使用したUITextFieldの使い方を、初心者にも分かりやすく10のサンプルコードと共に解説していきます。

プログラムのカスタマイズや、様々なシーンでのトラブルシューティングの方法を網羅的に学び、UITextFieldを使いこなすための知識と技術を身に付けていきましょう。

●Objective-Cとは?

Objective-Cは、C言語をベースにしたオブジェクト指向プログラミング言語で、AppleのMacOSやiOSのアプリケーション開発に広く利用されていました。

Objective-CはSmalltalkのオブジェクト指向概念をC言語に取り入れることによって開発された言語であり、その構文や多くの特徴は後に登場するSwift言語にも影響を与えています。

クラスの宣言やメッセージパッシングなど、オブジェクト指向のコアとなる概念が使えるため、大規模なアプリケーション開発に適しています。

○Objective-Cの基本

Objective-Cを学ぶ上で押さえておくべき基本的な特徴として、先述のメッセージパッシングの概念があります。

これは、オブジェクト間での情報のやり取りを意味し、Objective-Cではメソッドの呼び出しを「メッセージの送信」と表現します。

また、Objective-Cではヘッダーファイル(.hファイル)でインターフェースを宣言し、実装ファイル(.mファイル)で具体的なコードを書きます。

この2つのファイル分割により、プログラムの構造が明確になり、他のプログラマーがコードを理解しやすくなっています。

さらに、Objective-Cではポインタを用いた動的なメモリ管理が特徴で、強力なランタイム機能を持ち、動的にクラスやメソッドを変更することが可能です。

これにより、非常に柔軟なプログラミングが行えるようになります。

●UITextFieldとは?

UITextFieldはiOSアプリケーション開発における基本的なUIコンポーネントの一つで、ユーザーがアプリ内でテキストを入力するためのフィールドです。

Objective-CやSwiftなどの言語を使ってiOSアプリケーションを開発する際には、このコンポーネントが頻繁に使用されます。

UITextFieldはユーザーインターフェイスを構築する際に、StoryboardやXIBファイル、またはコード上で直接定義することが可能であり、入力されたテキストの取得や編集、表示のスタイル設定など、様々な機能を提供しています。

○UITextFieldの基本的な役割と特徴

UITextFieldの役割は主にユーザーからのテキスト入力を受け取ることですが、それだけにとどまらず、さまざまなカスタマイズや機能拡張が可能です。

例えば、パスワード入力用のセキュアテキスト入力を設定したり、入力中のテキストをリアルタイムでバリデーションしたりすることができます。

さらに、プレースホルダーテキストを表示して、ユーザーに期待される入力形式のヒントを提供することも可能です。

特徴として、UITextFieldはデリゲートパターンを通じて、テキストの編集開始や終了、テキスト変更時といったイベントを捕捉し、開発者がカスタム動作を実装するためのフックを提供します。

これにより、開発者はアプリのニーズに合わせて、テキストフィールドの動作を細かくコントロールすることができます。

さらに、UITextFieldはビジュアルアスペクトに関しても高い柔軟性を持っており、ボーダースタイルやフォント、テキストカラー、背景色などを簡単に変更できます。

これにより、アプリのデザインテーマに合わせて、見た目をカスタマイズすることができるのです。

●UITextFieldの基本的な使い方

UITextFieldはiOSアプリケーションにおける基本的なUIコンポーネントの一つであり、ユーザーがテキストを入力できるテキストフィールドです。

Objective-CでUITextFieldを使用する際は、まずUIKitフレームワークをインポートし、UITextFieldオブジェクトを初期化して画面に追加するプロセスを踏みます。

○サンプルコード1:基本的なUITextFieldの設置

UITextFieldを設置するためには、まず新しいUITextFieldオブジェクトを作成し、そのサイズと位置を定義します。

その後、UITextFieldを現在のビューに追加することで画面上に表示されます。

// UITextFieldオブジェクトを初期化
UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 100, 280, 40)];

// テキストフィールドの基本的なスタイルを設定
textField.borderStyle = UITextBorderStyleRoundedRect;
textField.font = [UIFont systemFontOfSize:15];
textField.placeholder = @"ここに入力してください";
textField.autocorrectionType = UITextAutocorrectionTypeNo;
textField.keyboardType = UIKeyboardTypeDefault;
textField.returnKeyType = UIReturnKeyDone;
textField.clearButtonMode = UITextFieldViewModeWhileEditing;
textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;

// テキストフィールドをビューに追加
[self.view addSubview:textField];

このコードではCGRectMakeを使ってテキストフィールドの位置とサイズを設定し、様々なプロパティを使ってテキストフィールドの見た目や挙動をカスタマイズしています。

例えばplaceholderプロパティには、何も入力されていないときに表示されるテキストを設定します。

○サンプルコード2:テキスト入力の取得と処理

ユーザーが入力したテキストを取得し、何らかの処理をするためには、UITextFieldのdelegateメソッドを実装する必要があります。

下記のコードは、UITextFieldDelegateプロトコルを採用し、テキストが変更された時やリターンキーが押された時の処理を記述しています。

// UITextFieldDelegateプロトコルを採用する
@interface ViewController () <UITextFieldDelegate>

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    // UITextFieldの初期設定...

    // デリゲートを自分自身に設定
    textField.delegate = self;
}

// テキストが変更された時の処理
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    // 変更後のテキスト内容を取得
    NSString *newText = [textField.text stringByReplacingCharactersInRange:range withString:string];
    // 何らかの処理を実行する
    // 例: バリデーション、データベースへの保存など

    return YES; // テキストの変更を許可する
}

// リターンキーが押された時の処理
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    // キーボードを閉じる
    [textField resignFirstResponder];

    return YES;
}

@end

このコードではtextField:shouldChangeCharactersInRange:replacementString:メソッドで、テキストが変更されるたびにその内容を処理しています。

またtextFieldShouldReturn:メソッドでは、リターンキーが押された時にキーボードを閉じる動作を定義しています。

○サンプルコード3:プレースホルダーの設定

UITextFieldのプレースホルダーは、テキストフィールドにまだ何も入力されていない時に表示される薄いテキストで、ユーザーに期待される入力の種類を示唆します。

例えば、メールアドレス入力フィールドには「example@example.com」というプレースホルダーを設定して、どのような形式の入力が求められているのかをユーザーに伝えることができます。

下記のサンプルコードは、UITextFieldにプレースホルダーテキストを設定する方法を表しています。

// UITextFieldインスタンスの生成
UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 100, 280, 40)];

// プレースホルダーテキストの設定
textField.placeholder = @"名前を入力してください";

// プレースホルダーテキストの色の設定(任意)
[textField setValue:[UIColor lightGrayColor] forKeyPath:@"_placeholderLabel.textColor"];

// テキストフィールドのスタイル設定
textField.borderStyle = UITextBorderStyleRoundedRect;
textField.font = [UIFont systemFontOfSize:15];

// 親ビューに追加
[self.view addSubview:textField];

このコードではUITextFieldを生成して、指定されたフレーム内で表示するように設定しています。

placeholderプロパティに「名前を入力してください」というテキストを設定することで、ユーザーがこのフィールドに何を入力すれば良いのかを視覚的に案内しています。

加えて、プレースホルダーテキストの色を変更するためにsetValue:forKeyPath:メソッドを使用しています。

そして、borderStylefontプロパティを設定することで、テキストフィールドの外観をカスタマイズしています。

このコードをアプリケーションに組み込み、実行すると、画面上に四角い枠で囲まれたテキストフィールドが表示され、プレースホルダーとして「名前を入力してください」という灰色のテキストが表示されます。

ユーザーがテキストフィールドをタップすると、キーボードが現れて入力が可能になり、何かを入力するとプレースホルダーのテキストは消えて入力されたテキストが表示されます。

●UITextFieldの応用例

UITextFieldはiOSアプリケーションでユーザーからテキスト入力を受け付ける際に不可欠なUIコンポーネントです。

その応用範囲は広く、シンプルなテキスト入力からセキュリティが要求されるパスワード入力、またはフォーマットを要求される電話番号入力など、多岐にわたります。

ここではいくつかの具体的な応用例を紹介し、実装方法をサンプルコードを交えて解説していきます。

○サンプルコード4:パスワードフィールドの作成

UITextFieldを使用してパスワードフィールドを作成する際には、入力された文字が見えないようにする必要があります。

これを実現するには、isSecureTextEntry プロパティを true に設定します。

下記のコードでは、セキュアなテキストフィールドを設定しています。

// パスワード用のUITextFieldを初期化
UITextField *passwordField = [[UITextField alloc] initWithFrame:CGRectMake(20, 100, 280, 40)];
// セキュリティ入力を有効にする
passwordField.isSecureTextEntry = YES;
// プレースホルダーに表示するテキストを設定
passwordField.placeholder = @"パスワードを入力してください";
// ビューに追加
[self.view addSubview:passwordField];

このコードでは、まずCGRectMakeを使用してフィールドの位置とサイズを指定し、isSecureTextEntryYES に設定することで入力されたテキストがマスクされるようにしています。

プレースホルダーにはユーザーにガイダンスを提供する文言を表示しています。

このフィールドにテキストを入力すると、実際には入力した文字は見えず、代わりにドットが表示されます。

これにより、パスワードのような機密情報が第三者に見られるリスクを減らします。

○サンプルコード5:電話番号形式の入力フィールド

ユーザーに電話番号を入力してもらう場合、特定のフォーマットを要求することがよくあります。

UITextFieldを使ってこのような入力を受け付けるには、キーボードのタイプを変更し、入力される文字のフォーマットをチェックする必要があります。

下記のコードは、電話番号用のキーボードを表示し、入力フォーマットをチェックする方法を表しています。

// 電話番号用のUITextFieldを初期化
UITextField *phoneField = [[UITextField alloc] initWithFrame:CGRectMake(20, 150, 280, 40)];
// キーボードタイプを電話番号用に設定
phoneField.keyboardType = UIKeyboardTypePhonePad;
// プレースホルダーを設定
phoneField.placeholder = @"電話番号を入力してください";
// ビューに追加
[self.view addSubview:phoneField];

// ユーザーが入力を変更した時に呼ばれるメソッドをセット
[phoneField addTarget:self action:@selector(formatPhoneNumber:) forControlEvents:UIControlEventEditingChanged];

ここではkeyboardTypeUIKeyboardTypePhonePadに設定することで、数字と特定の記号のみを入力できるキーボードを表示しています。

また、addTarget:action:forControlEvents:メソッドを使用してユーザーがフィールドに何かを入力するたびにformatPhoneNumber:メソッドが呼ばれるように設定しています。

formatPhoneNumber:メソッドは次のように実装されます。

- (void)formatPhoneNumber:(UITextField *)textField {
    // textField.textをチェックしてフォーマットを整えるロジックをここに書く
}

このメソッド内では、ユーザーが入力する電話番号のテキストを受け取り、必要に応じて文字列を適切なフォーマットに整形します。

例えば、ユーザーが数字を入力するたびにハイフンを挿入して電話番号の形式にするなどの処理を行います。

○サンプルコード6:リアルタイムでのバリデーション

実際のコード例を見てみましょう。

下記のサンプルでは、UITextFieldに入力されたテキストが特定の条件を満たしているかをチェックし、満たしていなければユーザーにフィードバックを与えます。

例として、電子メールアドレスのバリデーションをリアルタイムで行う方法を表します。

// UITextFieldDelegateプロトコルに準拠したクラスの実装部分

// テキストが変更されるたびに呼び出されるメソッド
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    // 現在のテキストを取得
    NSString *currentText = textField.text;
    // 変更後のテキストを生成
    NSString *updatedText = [currentText stringByReplacingCharactersInRange:range withString:string];

    // バリデーション関数を使用してメールアドレスが有効かどうかをチェック
    BOOL isValidEmail = [self isValidEmail:updatedText];
    if (!isValidEmail) {
        // 有効でない場合は、テキストフィールドの背景色を変更してユーザーに警告
        textField.backgroundColor = [UIColor colorWithRed:1.0 green:0.8 blue:0.8 alpha:1.0];
    } else {
        // 有効な場合は、背景色を白に戻す
        textField.backgroundColor = [UIColor whiteColor];
    }

    // テキストの変更を許可
    return YES;
}

// メールアドレスが有効かどうかをチェックするメソッド
- (BOOL)isValidEmail:(NSString *)email {
    // 正規表現を使ってメールアドレスのフォーマットをチェック
    NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}";
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
    return [emailTest evaluateWithObject:email];
}

このコードでは、メールアドレスが適切な形式であるかどうかを正規表現を使ってチェックし、その結果に基づいてテキストフィールドの背景色を変更しています。

正規表現は電子メールアドレスの一般的なパターンを定義しており、isValidEmail:メソッドはこれを使って入力されたアドレスがそのパターンに適合しているかを評価しています。

ユーザーが入力を進めるごとにshouldChangeCharactersInRange:メソッドが呼び出され、リアルタイムでバリデーションが行われます。

このコードを実行すると、ユーザーはメールアドレスを入力する際に、そのメールアドレスが適切かどうかを即座に知ることができます。

これにより、エラーが発生する前にユーザーが自身の入力を修正する機会を持てるようになり、ユーザーエクスペリエンスが向上します。

●UITextFieldのデリゲートメソッドの活用

iOS開発におけるUITextFieldの効率的な使用法を深堀りする際、デリゲートメソッドの理解と適切な活用は欠かせません。

UITextFieldのデリゲートメソッドを利用することで、テキストフィールドの編集開始や終了、テキストの変更といったイベントに応じたカスタム処理を実装できます。

これにより、高度なユーザーインターフェースと、滑らかなユーザーエクスペリエンスを提供するアプリケーションの開発が可能となります。

○サンプルコード7:デリゲートを使用したイベント処理

Objective-CでUITextFieldのデリゲートメソッドを活用する際、まずUITextFieldDelegateプロトコルをクラスに適合させる必要があります。

次に、UITextFieldのインスタンスに対して、そのクラス自身をデリゲートとして割り当てることで、デリゲートメソッドを通じたイベント処理を行うことができます。

このコードではUITextFieldDelegateを採用しているViewControllerクラスの一部を表しています。

この例では、ユーザーがテキストフィールドの編集を開始すると、デリゲートメソッドtextFieldShouldBeginEditingが呼び出され、編集を許可するかどうかを決定しています。

また、テキストが変更されるたびにtextFieldDidChangeSelectionが呼び出され、特定のロジックに従って変更を監視しています。

// ViewController.h
#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITextFieldDelegate>
@end

// ViewController.m
#import "ViewController.h"

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // UITextFieldの初期設定
    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 100, 280, 40)];
    textField.delegate = self; // デリゲートを自身に設定
    textField.borderStyle = UITextBorderStyleRoundedRect;
    [self.view addSubview:textField];
}

// テキストフィールドの編集が開始される直前に呼ばれる
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    // ここに編集開始前の処理を書く
    return YES; // 編集を許可する
}

// テキストフィールドで選択が変更されたときに呼ばれる
- (void)textFieldDidChangeSelection:(UITextField *)textField {
    // ここにテキスト変更時の処理を書く
    // 例えば、テキストの長さを監視して特定のアクションを起こすなど
}

@end

このコードを実行すると、ユーザーがテキストフィールドをタップするとキーボードが表示され、textFieldShouldBeginEditingメソッドが呼び出されます。

YESを返すことで編集が許可され、ユーザーは入力を開始できます。

textFieldDidChangeSelectionメソッドはテキストフィールド内のカーソルが移動するたびに呼び出され、これを利用して例えばリアルタイムでのバリデーションなどの処理を挿入することが可能です。

●カスタマイズ方法

UITextFieldはiOSアプリケーションにおける基本的なUIコンポーネントであり、テキスト入力をユーザーから受け取るために広く使用されています。

カスタマイズはアプリの外観と感触をユーザーの期待に合わせるために不可欠です。

ここでは、Objective-Cを使用してUITextFieldをカスタマイズするいくつかの方法を紹介します。

カスタマイズの選択肢は多岐にわたりますが、ここではフィールドの外観変更やキーボードタイプの調整など、より実用的なカスタマイズ例を2つ提供します。

○サンプルコード8:フィールドの外観カスタマイズ

UITextFieldの外観をカスタマイズするには、様々なプロパティを設定します。

例えば、ボーダースタイル、フォント、テキストカラー、背景色、枠線などをカスタマイズすることが可能です。

下記のサンプルコードでは、UITextFieldの枠線を丸くし、背景色を薄いグレーに設定し、プレースホルダーのテキストをカスタマイズする方法を表しています。

// UITextFieldのインスタンスを作成
UITextField *customTextField = [[UITextField alloc] initWithFrame:CGRectMake(50, 100, 200, 40)];

// 枠線のスタイルを設定
customTextField.borderStyle = UITextBorderStyleRoundedRect;

// フォントの種類とサイズを設定
customTextField.font = [UIFont systemFontOfSize:15];

// プレースホルダーのテキストを設定
customTextField.placeholder = @"ここに入力してください";

// プレースホルダーのテキストカラーを設定
customTextField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"ここに入力してください" attributes:@{NSForegroundColorAttributeName: [UIColor lightGrayColor]}];

// テキストフィールドの背景色を設定
customTextField.backgroundColor = [UIColor colorWithWhite:0.9 alpha:1.0];

// テキストフィールドをビューに追加
[self.view addSubview:customTextField];

このコードでは、UITextBorderStyleRoundedRect を使ってテキストフィールドに丸みを帯びた枠線を設定しています。

また、UIFontNSForegroundColorAttributeName を用いてフォントとプレースホルダーのテキストカラーをカスタマイズしています。

backgroundColor プロパティにより背景色を薄いグレーに変更しており、これによってユーザーにとってより視覚的に魅力的なテキストフィールドが実現します。

上記のコードを実行すると、ユーザーインターフェイスにカスタマイズされたテキストフィールドが表示されます。

丸みを帯びた枠線、指定されたフォントスタイル、そして薄いグレーの背景が適用されたテキストフィールドは、アプリの外観を一層洗練させることでしょう。

○サンプルコード9:キーボードタイプの変更

UITextFieldでは、入力する内容に応じてキーボードのタイプを変更することができます。

例えば、メールアドレスや数字、URL入力専用のキーボードに変更することで、ユーザーの入力を容易にし、エラーを減らすことが可能です。

下記のサンプルコードでは、UITextFieldのキーボードタイプをメールアドレス専用に設定する方法を表しています。

// UITextFieldのインスタンスを作成
UITextField *emailTextField = [[UITextField alloc] initWithFrame:CGRectMake(50, 150, 200, 40)];

// キーボードタイプをメールアドレス専用に設定
emailTextField.keyboardType = UIKeyboardTypeEmailAddress;

// テキストフィールドをビューに追加
[self.view addSubview:emailTextField];

keyboardType プロパティを UIKeyboardTypeEmailAddress に設定することで、メールアドレス入力時に最適化されたキーボードが表示されます。

これにより、メールアドレスの入力が容易になり、ユーザーエクスペリエンスが向上します。

上記のコードを実行すると、メールアドレス入力に最適化されたキーボードを備えたUITextFieldがユーザーインターフェイスに表示されます。

これにより、入力の正確性が高まり、ユーザーの入力体験が改善されることでしょう。

●トラブルシューティングと対処法

UITextFieldを使用する際には、さまざまな問題が発生する可能性があります。

キーボードが表示されない、テキストが正しく表示されない、特定の文字入力が受け付けられないなど、多岐にわたるトラブルが考えられます。

ここでは、これら一般的な問題の原因と対処法を解説し、よりスムーズなUITextFieldの利用を支援します。

○サンプルコード10:一般的な問題とその解決策

UITextFieldの利用においてよく遭遇する問題の一つに、テキストフィールドがユーザーの入力を受け付けないというものがあります。

このような場合、まずはテキストフィールドが適切に初期化され、ビューに追加されているか確認する必要があります。

また、デリゲートが正しく設定されていないと、イベントを捉えることができません。

下記のサンプルコードは、テキストフィールドが入力を受け付けない問題の解決方法を表しています。

// UITextFieldDelegateプロトコルを遵守するためにViewController.hファイルで宣言
@interface ViewController : UIViewController <UITextFieldDelegate>

@end

// ViewController.mファイル内
@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    // UITextFieldのインスタンスを作成
    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 100, 280, 40)];

    // プレースホルダーのテキストを設定
    textField.placeholder = @"ここに入力";

    // テキストフィールドのデリゲートを設定
    textField.delegate = self;

    // テキストフィールドをビューに追加
    [self.view addSubview:textField];
}

// UITextFieldDelegateメソッド
// テキストフィールドでリターンキーが押されたときの動作を定義
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    // キーボードを隠す
    [textField resignFirstResponder];
    return YES;
}

@end

このコードでは、UIViewControllerのサブクラスがUITextFieldDelegateプロトコルを採用していることを表しています。

そして、viewDidLoad メソッド内でUITextFieldのインスタンスを生成し、プレースホルダーにテキストを設定後、自身をデリゲートとして指定しています。

これにより、UITextFieldがイベントを受け取る準備が整います。

textFieldShouldReturn メソッドは、ユーザーがリターンキーを押した際にキーボードを非表示にするために用います。

このコードの実行結果としては、画面にUITextFieldが表示され、ユーザーがテキストを入力できるようになります。

リターンキーを押すと、キーボードが閉じて入力が完了します。

このようにして一般的なトラブルシューティングを行いながら、さまざまな問題に対処できるようになることが重要です。

まとめ

UITextFieldはiOS開発において不可欠なコンポーネントであり、Objective-Cを用いて多岐にわたるカスタマイズが可能です。

本記事では、UITextFieldの基本的な使い方から応用例、そしてカスタマイズ方法に至るまで、10種類の実用的なサンプルコードを交えて解説しました。

これらのコードは、開発者がアプリ内でのテキスト入力フィールドの実装を容易にし、ユーザー体験を高めるために有効です。

UITextFieldを用いたテキスト入力は、アプリケーションにおける基本的なインタラクションの一つです。

今回紹介したサンプルコードと解説を通じて、プログラミング初心者でもObjective-CでのUITextFieldの使い方を習得し、さまざまなシナリオに適応できるテキストフィールドを実装できるようになることを願っています。