Swift転職なら=>【LevTech】
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大

頭痛が減ったので共有です!

rebuild.fmを応援しています!

HOME > UITextfieldで文字を編集する

UITextfieldで文字を編集する

テキストフィールド画像

UILabelと同じように文字を表示するクラスですが、このクラスは文字の編集が可能です。

UITextFieldのクラス階層

f

NSObject

UIResponder

UIView

UIControl

UITextField


参考:004 UITextFieldで文字を入力
参考:UIKit Framework Reference UITextField Class Reference

やってみました

まず簡単な処理


let myTextField: UITextField = UITextField(frame: CGRectMake(0,0,500,30))
myTextField.text = "Hello Swiftサラリーマン!!"
self.view.addSubview(myTextField)

テキストフィールド画像

これだけだとUIlabelと同じに見えますね。


let myTextField: UITextField = UITextField(frame: CGRectMake(0,0,500,30))
myTextField.text = "Hello Swiftサラリーマン!!"
myTextField.borderStyle = UITextBorderStyle.RoundedRect
self.view.addSubview(myTextField)

テキストフィールド画像

枠をつけてみました。


let myTextField: UITextField = UITextField(frame: CGRectMake(0,0,500,30))
myTextField.text = "Hello Swiftサラリーマン!!"
myTextField.delegate = self; // UITextFieldDelegateを親Viewに追加
myTextField.borderStyle = UITextBorderStyle.RoundedRect
self.view.addSubview(myTextField)

テキストフィールド画像

親Viewにdelegateをセット。UITextFieldDelegateを追加しないとランタイムエラーになるので注意。この状態なら親のUIViewControllerからTextFieldの各イベントを取得できます。


let myTextField: UITextField = UITextField(frame: CGRectMake(0,0,500,30))
myTextField.text = "Hello Swiftサラリーマン!!"
myTextField.delegate = self;
myTextField.borderStyle = UITextBorderStyle.RoundedRect
self.view.addSubview(myTextField)
 
//編集直後
func textFieldDidBeginEditing(textField: UITextField){
    println("textFieldDidBeginEditing:" + textField.text)
} 
//編集完了後(完了直前)
func textFieldShouldEndEditing(textField: UITextField) -> Bool {
    println("textFieldShouldEndEditing:" + textField.text)
    return true
} 
//編集完了後(完了直後)
func textFieldDidEndEditing(textField: UITextField) -> Bool {
    println("textFieldDidEndEditing:" + textField.text)
    return true
} 
//改行時
func textFieldShouldReturn(textField: UITextField) -> Bool {
    textField.resignFirstResponder()
    return true
}
    

クリアボタンが押された時に実行されるtextFieldShouldClearもありますがFPPopoverが原因でイベントが取得できませんので注意。

おまけ:複数のTextFieldを一元管理するには

textfieldのプロパティのtagに番号をセットしておけば振り分けが可能です。


enum TextFieldType {
  case Textfield001
  case Textfield002
  case Textfield003
}

let myTextField: UITextField = UITextField(frame: CGRectMake(0,0,500,30))
myTextField.text = "Hello Swiftサラリーマン!!"
myTextField.delegate = self;
myTextField.tag = TextFieldType.Textfield001.hashValue;
myTextField.borderStyle = UITextBorderStyle.RoundedRect
self.view.addSubview(myTextField)

//なにかしらのイベント。改行時
func textFieldShouldReturn(textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        
        switch textField.tag{
        case TextFieldType.Textfield001.hashValue:
            //処理1
            break;
        case TextFieldType.Textfield002.hashValue:
            //処理2
            break;
        case TextFieldType.Textfield003.hashValue:
            //処理3
            break;
        default:
            // 上記以外
            break;
        }
        
        return true
    }

おまけ:未入力の時に文字を表示させるPlaceholder

テキストフィールド画像

入力前のテキストフィールドに薄いグレーの文字を表示する方法です。


let myTextField: UITextField = UITextField(frame: CGRectMake(0,0,500,30))
myTextField.placeholder = "ここに入力してくださいね"
myTextField.borderStyle = UITextBorderStyle.RoundedRect
self.view.addSubview(myTextField)

おまけ:テキストの中身が正しいEmailアドレスかどうか

文字列が正しいEmailかどうかの判断をさせる場合に利用します。



     println(isValidEmail("swift-salarymail@@@@eeee"));//false
     println(isValidEmail("swift-salaryman@gmail.com"));//true
     println(isValidEmail("swift-salarymail.com"));//false
     println(isValidEmail("swift-salarymail.gmail.com"));//false
     println(isValidEmail("111244242@hotmail.com"));//true
    
    func isValidEmail(emailstr:String) -> Bool {
        let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
        
        let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
        return emailTest.evaluateWithObject(emailstr)
    }
    

参考:How to validate an e-mail address in swift?

テキスト複数表示のTextViewの記事はこちらからどうぞ!

縦書き表記に興味のある方はこちらの記事をどうぞ!

↓こんな記事もありますよ!

のんでいるくすり: 3.11震災時の体験から開発されたお薬アプリ。無料

今日は薬を便利にかつ守秘的にメモできるアプリのんでいる薬をご紹介します。 実はアプリレビューは初めて。 SwiftサラリーマンのFBページを経由して開発者でもあり薬剤師のBlueRoy(ブルーロワ・インク) Inc. のShige様とお知り合いになる事ができて、是非レビューさせて下さいと私からお願いした経緯で今回レビュー記事に繋がりました。 Shige様、快く了承頂き本当にありがとうございました!

デバッグ時とリリース時に処理を変更する#ifdef DEBUG のやり方

DEBUG時だけ特定の動作をさせて、リリース時に排除したい、そんな時に利用する方法です。Swiftでは標準ではDEBUGとリリースの判断がつかないので、 コンパイル時に設定する必要があります

UIStepper

さて今回は基本のコンポーネントの一つStepper(メモリを少しずつ+とーで上下させるコントロール)を説明します。 単純なコントロールですのが、初期設定で、+と-が表示される優れものです。ただ、単調な為に記事にするのが面白くないので、 何度も申し訳ありませんが「ヒゲ」にフォーカスして、ヒゲを剃るStepper(ヒゲの量を調整する)を作成して説明してみます。
このエントリーをはてなブックマークに追加
右側のFacebookのLikeをクリック頂けると記事更新の際に通知されますので宜しければご利用下さい!