↑クリックして拡大
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大

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

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: CGRect(x:0,y:0,width:500,height:30))
myTextField.text = "Hello Swiftサラリーマン!!"
myTextField.borderStyle = UITextBorderStyle.roundedRect
self.view.addSubview(myTextField)

テキストフィールド画像

枠をつけてみました。



let myTextField: UITextField = UITextField(frame: CGRect(x:0,y:0,width:500,height:30))
myTextField.text = "Hello Swiftサラリーマン!!"
myTextField.delegate = self;
myTextField.borderStyle = UITextBorderStyle.roundedRect
self.view.addSubview(myTextField)

テキストフィールド画像

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


let myTextField: UITextField = UITextField(frame: CGRect(x:0,y:0,width:500,height:30))
myTextField.text = "Hello Swiftサラリーマン!!"
myTextField.delegate = self;
myTextField.borderStyle = UITextBorderStyle.roundedRect
self.view.addSubview(myTextField)
 
//編集直後
func textFieldDidBeginEditing(_ textField: UITextField){
    print("textFieldDidBeginEditing:" + textField.text!)
}
//編集完了後(完了直前)
func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
    print("textFieldShouldEndEditing:" + textField.text!)
    return true
}
//編集完了後(完了直後)
private func textFieldDidEndEditing(textField: UITextField) -> Bool {
    print("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の記事はこちらからどうぞ!

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

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


2021-05-14 14:21:41

WatchOSのwatchconnectivityのFiletransferの落とし穴。と、避け方。

AppleWatch 実機だと成功するんだけど、シュミレーターだと失敗するという、、、 昔作成してた時は成功してたのになーと思って調べると、どうやら昔は成功してたみたい。watchOS6以降は...

2021-05-06 14:04:37

LINEのアニメーションスタンプ制作の落とし穴、、、失敗談

ゴールデンウィークにLINEスタンプを作成してみました。 作り切って申請も通したんですが、意図したアニメーションと違う、、、、 LINEクリエーターの画面だと、アニメーションのプレビュー...

2021-05-01 18:05:35

久しぶりのAdmobをobjective-cに実装。コンパイルエラーだらけ。バーミッション不具合でエミュレータにインスコできない。

忘れないようにメモ エミュレータにアプリをインストールする際にパーミッション系のエラーがでた時、また、iphone実機にインストールする際にも権限系のエラーが出る場合。 ターゲット→ex...
このエントリーをはてなブックマークに追加
右側のFacebookのLikeをクリック頂けると記事更新の際に通知されますので宜しければご利用下さい!