キーボードでEnterを押すと画面をキーボードが閉じるようにする
Swiftではなにも実装しないとEnterを押してもキーボードが閉じません
そこで以下のように実装します
import UIKit class ViewController: UIViewController , UITextFieldDelegate{ @IBOutlet weak var textField: UITextField! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. //デリゲートを設定 textField.delegate = self } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } //このメソッドを書くとキーボードを閉じれるようにnarimasu func textFieldShouldReturn(_ textField: UITextField) -> Bool{ // キーボードを閉じる textField.resignFirstResponder() return true } }
しかしこの方法だと少し問題あり、、、、
UITextFieldを使うたびに毎回以下のメソッドを書くのはめんどくさいですね、、、
//このメソッドを書くとキーボードを閉じれるようにnarimasu func textFieldShouldReturn(_ textField: UITextField) -> Bool{ // キーボードを閉じる textField.resignFirstResponder() return true }
同じことを繰り返させないようにすることに全力を出すのがプログラマーです。 そこで以下のように実装しましょう
自動生成されるViewControllerはお便利メソッドを置いておくクラスとする
ViewController
import UIKit class ViewController: UIViewController , UITextFieldDelegate{ var textFieldDelegate:UIViewController? override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func textFieldShouldReturn(_ textField: UITextField) -> Bool{ // キーボードを閉じる textField.resignFirstResponder() return true } }
これを作成し、Main.storyboardの画面ごとに新しくViewControllerクラスを作成し、先ほど作成したViewControllerに継承?させます
MainViewController
import UIKit //先ほど作成したViewControllerクラスを継承させる class MainViewController: ViewController{ @IBOutlet weak var textField: UITextField! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. //アウトレット接続したUITextFieldにデリゲートをセットさせる textField.delegate = self } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }
以上です。 これ同じメソッドを何回も書く必要はなくなりました。
私はこのViewControllerクラスに画面遷移するメソッドなどよく使う機能はここに書いて呼び出すようにしています。 ViewControllerが肥大化すると可読性がさがるので、、
ブラックアウトステッカー for Mac を買ってみた
自分プログラミングをするときタイピングがすごく遅くなるので これを練習目的で買ってみました。
また、私が尊敬する「増井雄一郎さん」(@masuidrive)も使用していて、 真似しました。笑
手触り
とても良いです!!!! 滑らかで、これを貼ったからといってキーボードが打ちにくくなるということはありません!
また、Macのキーボードも保護することもできますので一石二鳥ですね。
なにより、かっこいい
はい、かっこいいです。 Macbookを購入するときに無刻印にするオプションとかあればいいな〜と思います。
タイピングに関して
正直まだ慣れません、、、、、 タイピングって無刻印にしただけでこんなに難しくなるのだと感じます。
ブラインドタッチができると思っていても、無意識のうちにキーボードをみているんですかね、、
商品について
商品はアマゾンで買うことができます。 私は、Macbook air 13inch を使用していますが、 USキーボード用や、Macbook、新型MacbookProなどのバタフライキーボード(キーボードが薄いやつ)に対応しているものもあるようです。
↓私が購入したもの
↓US配列
↓バタフライキーボード用
もろもろ
Androidで画面にデータを表示するときに注意
TextViewなどで画面にデータを表示する場合
全てString型に変換する必要があります!!!
Button submit = (Button)findViewById(R.id.submit); submit.setText("ここは必ずStrin型!!!");
以下はエラーになります。
int num = 3: Button submit = (Button)findViewById(R.id.submit); submit.setText(num);
どうやら、リソースIDと勘違いして「そんなリソースIDはないよー」っていうエラーを出すようです。。。。。
以下のように実装しましょう
int num = 3: Button submit = (Button)findViewById(R.id.submit); submit.setText(String.valueOf(num));
今日かなりハマりました。。。。。。
画面遷移する前に制御する[Swift]
画面遷移する前に制御する[Swift]
Swiftでは画面遷移する前に入力バリデーションチェックしたり、遷移先の画面にデータを渡したしするすることができます。
画面遷移する前に以下のメソッドを呼び出す
override func shouldPerformSegue(withIdentifieridentifier: String, sender: Any?) -> Bool
falseを返したときは画面遷移させずにtrueを返したときだけ画面遷移します。
以下のサンプルソースのコメントを使って解説します。
class ViewController: UIViewController { @IBOutlet weak var textField: UITextField! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } //下記のメソッドを追加する override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool { //データが空の場合は画面推移しない if textField.text == ""{ return false } //trueを返したときだけ画面遷移する return true }
値を次の画面に渡したい場合もこのメソッドの中でデータをセットすればよいということになります。
以上です。
Ruby on Railsでデータベースとやりとりする(初心者向け)
Ruby on Railsでデータベースとやりとりする方を説明します。
開発環境構築が終わっていることを前提として説明していきますのでまだ開発環境構築できていない方は先に行ってきてください。(Webで探せば色々ありますので)
1、プロジェクトの作成
Ruby on Railsでは主にコマンドプロンプトで使っていきます。
Railsのプロジェクト作成は以下のコマンドで作成できます
rails new プロジェクト名
プロジェクト作成
今回は商品管理システムを作成していきます。
コマンドプロンプトで以下のコマンドを実行します。
rails new productManagment
すると下記のようにRailsのファイルが作成されていきます。
2、Railsのプロジェクト内に必要なファイルを作成していく
cd コマンドを使って先ほど作成したディレクトリに移動しましょう
cd productManagment
必要なファイルの作成
Railsでは必要なファイルをコマンド作成できます
rails generate 必要なファイル
今回は「scaffold」コマンドを使って標準的なファイル群及び設定ファイルを一気に作ります。
rails generate scaffold データモデル名 データ属性:形式(複数列記)
今回は、登録する商品の「名前」「価格」「説明」を登録できるようにします。
rails generate scaffold Product name:string price:integer content:text
下記のように必要なファイルが作成されました。
3、データベースファイルに自動書き込み
ここまでではまだ、「データベースファイル」が作成されていないので、「データベースファイルに書き込み操作」をします。
以下のコマンドを実行するとデータベースファイルに書き込まれます。
rails db:migrate
4、商品管理システムを実行する
1〜3の操作のみで「商品管理システム」の完成です。(笑)
簡単すぎますね、、、
それでは作成したシステムを実行します。
サーバーを起動する
ローカルサーバーを起動するために以下のコマンドを実行します。
rails server
以下のような画面がでたらサーバーが起動できています。
サーバーが起動したらwebブラウザを使って画面に表示させます。
システムを表示する
webブラウザで以下URLに作成する
http://localhost:3000/products
すると以下のような画面が表示されます。
この画面では商品の
「表示」「登録」「編集」「削除」
の機能が備わっています。簡単すぎますね。。。。
次回は画面を編集したり、新たな機能を追加したりしていきます。