フリープログラマー日記

iOS,アンドロイド開発を気ままにしながら生きてるおじさんのブログです。

第33回 氏名入力は、UITextFieldを使って入れればいいんだね。

 ゲームでは、あんまり使わない、文字入力なんですが、これはもう本当にプロの人から見れば一笑に付されるようなことしていると思います。

とりあえず、iPhoneでこんな画面を作りました。

f:id:momonga117:20180601205646p:plain

 左側のウインドウはスクロールビューで、氏名が入るとことなんですが、最後に氏名登録ボタンを設置しました。これをタップすることで、氏名入力画面が出てくるようにしています。
 
 ところで、オブジェクトの階層でいうと、EntryView(全体) の下にスクロールビューや出場者の表示、その他のボタンがあり、スクロールビューの中に、登録された選手名(今は0人)とこの登録ボタンがあります。
 で、この登録ボタンがトリガーになって、右側の状態になるというのが今回考えた部分ですが、右側の画面は、一つのクラスになっていて、独立したものです。

import UIKit

class NameInputView: UIView,UITextFieldDelegate {
    override init(frame: CGRect) {
        super.init(frame: frame)
        // 背景色は半透明の青色
        backgroundColor = UIColor(red: 0, green: 155/255, blue: 155/255, alpha: 220/255)
        
        // 走者名を登録します
        let infomation: UILabel = UILabel(frame:MySettings.Entry.imfomationFrame())
        infomation.text = "登録する氏名を入力してください"
        infomation.textAlignment = .center
        infomation.backgroundColor = UIColor.white
        addSubview(infomation)
        
        //入力用textField
        let nameField: UITextField = UITextField(frame: MySettings.Entry.nameFieldFrame())
        nameField.backgroundColor = UIColor.white
        addSubview(nameField)
        nameField.resignFirstResponder()
        
        //OKボタン
        let okButton: UIButton = UIButton(frame: MySettings.Entry.okButtonFrame())
        okButton.setTitle("名前を登録", for: .normal)
        okButton.setTitleColor(UIColor.black, for: .normal)
        okButton.backgroundColor = UIColor.lightGray
        addSubview(okButton)
        
        //キャンセルボタン
        let cancelButton: UIButton = UIButton(frame: MySettings.Entry.cancelButtonFrame())
        cancelButton.setTitle("キャンセル", for: .normal)
        cancelButton.setTitleColor(UIColor.black, for: .normal)
        addSubview(cancelButton)
        
        nameField.becomeFirstResponder()   // キーボードの表示
        
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}


 まあ、どこかの教科書に載ってるような、だらっとしたプログラムですが、素人がすることだから、こんなものでしょう。
 最後の .becomeFirstResponder() はキーボードを表示するもので、入力モードにしてしまいたいので入れてあります。


 この後は、名前を登録ボタンを押した時、Runnerクラスに実装する手順になります。

 私のこの連載を続けて読んでいただいている方はお分かりだと思いますが、Android,iOSの両方で、同じ構造、同じ動作をするプログラムを作るのが目的です。この部分はまだAndroid版に取り掛かっていませんが、今回のiOSでのUILabel、UITextField、UIButtonはAndroidにも同じ趣旨のものがあるようなので、基本的な部品を使って、(手抜きして)作って見ました。