質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Q&A

解決済

1回答

2898閲覧

Objective-Cで、サーバログイン画面のユーザIDとパスワードを保存して、すぐログインできるようにしたい。

Satochan24

総合スコア113

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

0グッド

0クリップ

投稿2015/06/10 11:17

Objective-CでiPhoneアプリ作っている初心者です。
サーバにログインして測位データを送るアプリなのですが、
毎回、IDとパスワードを入力するのが大変なので、ログイン画面に
「IDとパスワードを保存」という項目を作って、チェックした場合は、
次回アプリ起動時に前回のIDとパスワードが入力されている状態にしたいと
考えています。
調べたところ、iPhoneアプリでは標準でチェックボックスがないようですが、
実現可能でしょうか?
本やWEBで調べましたが、なかなかログイン画面の作り方などがなく困っています。
チェックボックス設置が時間がかかるなら、他の手段でもよいと思っています。
詳しい方がいらっしゃれば、教えてください。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

iOSにはチェックボックスのやなビューはありませんが、UIButtonと画像があれば実現可能です。

UIButtonにはselectedという選択状態を表すプロパティがあり、それを手動で切り替えます。

lang

1 2- (void)viewDidLoad 3{ 4 [super viewDidLoad]; 5 6 // ストーリーボードでも設定出来ます 7 [self.checkButton setBackgroundImage:[UIImage imageNamed:"未チェックの画像"] 8 forState:UIControlStateNormal]; 9 [self.checkButton setBackgroundImage:[UIImage imageNamed:"チェックの付いた画像"] 10 forState:UIControlStateSelected]; 11} 12 13- (IBAction)touchButton:(id)sender 14{ 15 // 選択状態を反転 16 self.checkButton.selected = !self.checkButton.selected; 17} 18 19- (void)login 20{ 21 if (self.checkButton.selected) { 22 // IDとパスワードの保存処理 23 //キーチェーンへ保存することが望ましいがユーザデフォルトに保存 24 NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; 25 [ud setObject:"IDをここで保存" forKey:"ID"]; 26 [ud setObject:"PWをここで保存" forKey:"Password"]; 27 [ud synchronize]; 28 } 29}

投稿2015/06/10 14:08

okenProg

総合スコア153

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Satochan24

2015/06/11 02:52

ご回答、ありがとうございます。ただいま、検証中ですが、"IDをここで保存"という箇所は、具体的な保存先をパスを含めて書くのでしょうか?あるいは、ファイル名だけ書けば、デフォルトのアプリ保存先に保存されるのでしょうか? また、ストーリーボードでは、UIBottonを設置して、上記コードだと、checkButtonの名前でプロパティ接続、touchButtonの名前でAction接続で良かったでしょうか? ビルドしてみると、立ち上げ時点で例外が発生してログイン画面もでなくなった状況です。
okenProg

2015/06/11 03:54

"IDをここで保存"のところは、保存したNSStringを設定します。 おそらく、IDやパスワードなどはUITextFieldで入力するかと思いますが、そのtextを入れてあげると良いです。 例えば、ID入力用のテキストフィールドの名前がself.loginIdTextFieldだった場合だと 以下のようになります。 [ud setObject:self.loginIdTextField.text forKey:"ID"]; >また、ストーリーボードでは、UIBottonを設置して、上記コードだと、checkButtonの名前でプロパティ接続、touchButtonの名前でAction接続で良かったでしょうか? それであっています。 テキストフィールドも先述のloginIdTextFieldという名前は仮のものなので、 そちらは既におかれているテキストフィールドの名前と合わせて下さい。 ちなみに、保存したIDなどは以下のように取り出して、 再度、ログイン画面が開かれた時にテキストフィールドに設定するとよいです。 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; NSString *loginId = [ud stringForKey:"ID"]; self.loginIdTextField.text = loginId; }
Satochan24

2015/06/11 07:34

またまた、回答ありがとうございました。 教えてもらったとおり実装できまして、ログインID、パスワードを毎回入力する必要がなくなりました。 ただ、少し想定していた動作と違う状況です。 1.一度チェックを入れてログインすると、次回起動時にIDとパスワードは入っていて、チェックは外れている。→できれば、この時点でチェックを入れたままにしたいです。 2. 1.の状態(チェックが外れている状態)で再度ログインし、ログアウト。すると、チェックは外れていたはずが、IDとパスワードとも入力された状態。チェックは外れている。→できれば、チェックを外した時はIDとパスワードは未入力にしたいです。 どこか実装でミスがあったのでしょうか?もし対応方法があれば教えて下さい。
okenProg

2015/06/11 09:38

1についてはID、パスワードと同様にチェックボックスが押されているかどうかを保存し、起動時にその値をボタンのselectedにセットしてあげるとよいです。 2は、ログイン時にチェックされてなければ、保存しているID、パスワードを削除する必要があります。 - (void)viewWillAppear:(BOOL)animated { ~ ID,パスワードをセットする処理~ self.checkButton.selected = [ud boolForKey:@"saveIdAndPassword"]; } - (void)login { // チェックボックスの選択状態を保存 NSUserDefaults *ud = [NSUserDefaults standardDefaults]; [ud setBool:self.checkButton.selected forKey:@"saveIdAndPassword"]; if (self.checkButton.selected) { ~ ID,パスワードを保存する処理 ~ } else { // IDパスワードを削除 [ud removeObjectForKey:@"ID"]; [ud removeObjectForKey:@"Password"]; } }
Satochan24

2015/06/11 11:09

ありがとうございました。無事、解決できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問