ソフト仕様書

アプリケーションを使用する際に調べたことをまとめたページ。

自動で置かれたNavigationBarのボタンの表示を変更したい

StoryBoardを使って画面遷移するiPhoneアプリを作った時に、NavigationBarをEmbedすると遷移先のナビゲーションバーに「戻る」用のボタンが自動で配置されます。

これって遷移元のページにタイトルをつけていると遷移元のタイトル名が、タイトルがないと「戻る」とボタンに書かれています。

しかしどうしてもボタンの表記を変えたい場合があります。
その時は

viewDidLoad メソッド内に

UIBarButtonItem *back = [[UIBarButtonItem alloc] init];
back.title = @"test"; // 文字列の設定
self.navigationItem.backBarButtonItem = back;

を書けばいいようだ。
画像に変更もできるらしい。

参考ページ:http://www.amuate.com/2011/05/08/backbarbuttonitem.html

キーボードの完了ボタン

IPhoneをいじっていると時々こんなものに出くわします。

f:id:mkgroove:20130428125423p:plain

キーボードの上に青い「完了ボタン」やら「前へボタン」「次ボタン」などが配置してあることがあります。
改行などするテキストボックスなどにあると非常に便利ですね。
キーボードの近くにあるので、すぐに操作ができる。

これどうやるんだろうとグーグルを検索してどのページを見ても「ナビゲートバーに閉じるボタンを配置して・・・・・・・」みたいなことしか書かれていません。
確かにそれでも出来るんですが、UIの利便性としてイマイチですよね。

ということで検索しまくりました。
そしたらなんと簡単にできるじゃありませんか。参考ページとこの手のやり方が出ている検索方法はのちほどにして。

まずStoryBoardはTextView以外は使っていません。

1、viewDidLoadメソッドに以下の赤い部分を追加


- (void)viewDidLoad
{


 [super viewDidLoad];
 //ツールバーを生成
 UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
 //スタイルの設定
 toolBar.barStyle = UIBarStyleDefault;
 //ツールバーを画面サイズに合わせる
 [toolBar sizeToFit];
 // 「完了」ボタンを右端に配置したいためフレキシブルなスペースを作成する。
 UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
 // 完了ボタンの生成
 UIBarButtonItem *_commitBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(closeKeyboard:)];
 // ボタンをToolbarに設定
 NSArray *toolBarItems = [NSArray arrayWithObjects:spacer, _commitBtn, nil];
 // 表示・非表示の設定
 [toolBar setItems:toolBarItems animated:YES];
 // ToolbarをTextViewのinputAccessoryViewに設定
 self._uiText.inputAccessoryView = toolBar;

}

メッソドを追加します。Closeボタン実行時の処理を記述。
-(void)closeKeyboard:(id)sender{
 [textField resignFirstResponder];
}

これだけです!

ツールバーのスタイル設定「toolBar.barStyle = UIBarStyleDefault;」はお好みの色に変えることもできます。

  • toolBar.barStyle = UIBarStyleBlack;

f:id:mkgroove:20130428132641p:plain

  • toolBar.barStyle = UIBarStyleBlackOpaque;

f:id:mkgroove:20130428132118p:plain

  • toolBar.barStyle = UIBarStyleBlackTranslucent;

f:id:mkgroove:20130428132124p:plain

  • toolBar.barStyle = UIBarStyleDefault;

f:id:mkgroove:20130428132131p:plain

BlackとBlackOpaqueの違いがよくわかりませんね(笑)

Googleで「Objective-C(もしくはiPhoneXCode)、キーボード ツールバー(もしくは間にスペースなしで「キーボードツールバー」」と検索すると色々なやり方が出てきます。
「キーボード 完了ボタン」で最初検索していたのでなかなか出てこなくて苦労しました。

参考ページは
http://works.sabitori.com/2011/06/18/add-button-to-keyboard/
色々なページを参考に四苦八苦やってみましたが、このページを見て拍子抜けしました。
ここではやり方を二つ紹介していました。
参考にされてみてはいかがでしょうか。

iPhoneでデータベースって使えるの?sqllite

表題通りiPhoneSQLが使えるかどうかのお話である。

現在UITableViewContlloerに登録・削除したデータやViewControllerで編集したデータを更新したデータを保持しておきたい。
当たり前の話なのだが、これらのデータはどこかに保持しないとアプリを閉じたりしたら消えてしまう。

それを防ぐためにはテキストデータやデータベースを使う必要があるのだが、昔からテキストデータは壊れやすいという言い伝え(?)がある。
安定感を求めるためにはデータベースを使いたいのだが、そのためには懸念事項があるわけだ。
そうデータベースを使ったものを作ったら、iPhone上で利用する時データベースをユーザーに入れるのを促さなくてはいけないのではないのかと・・・・・。

そこでまたググった。
なんとiPhoneにはもともとデータベースが入っていると。

データベースソフトと言えばOracleとかSQLServerとかMySQLとか聞いたことある人もいるだろう。

iPhoneで使われているSQLは「sqlite
名前の通り非常にコンパクトなDBである。

ちなみにCoreDataという手もあるようだ。
(参考:http://yutaniphone.blogspot.jp/2012/02/sqllite3.html
今はCoreDataについて調べるつもりはないが、SQLに慣れている人はsqliteがいいのであろう。
CoreDataが楽だとも限らないしね。

ということで開発環境にもSqliteをいれなくちゃ!

次回は開発環境にsqlliteをセットアップする方法。

スコープバーを消したい。

ネットのサンプルプログラムを元に作ったものでスコープバー(Scope Bar)が合ったのだが、これを削除してビルドしたらしつこく残っていた。
一般的な消し方は後で書くとして、消したつもりが消えていない時の対処法。

対応言語を増やすと言語ごとにStoryBordができる。
なので言語毎にスコープバーの設定を外さないとダメらしい。
f:id:mkgroove:20130413143650p:plain
左のプロジェクト領域を見てもらえば分かる通り、StoryBoardは言語毎にできる。


英語対応は消していても
f:id:mkgroove:20130413143815p:plain
日本語対応には残っていることがある
f:id:mkgroove:20130413143819p:plain

恐るべし、StoryBoard。

警告:scene is unreachable due to lack of entry points and does not have an identifier

表題のような警告が出た場合の対処法は

「Storyboard IDを入力する」

参考資料
http://kmacs1.blogspot.jp/2013/01/scene-is-unreachable-due-to-lack-of.html
http://santa20.com/index/tag/storyboard(Storyboard IDの設定方法)

ファイルがフォルダの外にある!

f:id:mkgroove:20130411200521p:plain

今朝の続きをやろうと思ったら、一部ファイルがフォルダの外にあった。
ファイルを移動したいのだが、どうしたらいいのだろうか?

やはり素晴らしいページがありました。
ファイルを移動してリンクを張り替えればいいらしい。
やり方はこちら。

http://ameblo.jp/xcc/entry-10430757859.html

UISearchBarに苦戦中

UITableView(Controller)にUISearchBarをくっつけてテーブル内の検索をできるようにしようとおもっているのだが、非常に苦戦している。
もちろんなんでもいいから作るというのなら、サンプルプログラムを使えばいいのだが・・・・
条件がいくつかある。それでも大した問題ではないのだが、、、、

1.環境がXCode4.6.1であること。
2.StoryBoardを使うこと。
3.Scope barはいらない。

作りたいものは
http://rakuishi.com/iossdk/3030/
に書かれている物。ただ上記で書かれている物は
http://syake-web.com/blog/2011/07/14/ios-uisearchbar/
を参考にしており、これを参考にしているのは
iOS Deveropper Libraryの「Table Search」のサンプルコードを参考にしているようだ。

しかし、ここに書かれているのはStoryBoardを使っていない。
ただStoryboardを使うことを前提にこれをまねて作ってみたが、うまく動かず。
StoryBoardを使った例はこちら
http://www.raywenderlich.com/ja/34037/table-view%E3%81%ABsearch%E6%A9%9F%E8%83%BD%E3%82%92%E5%8A%A0%E3%81%88%E3%81%BE%E3%81%97%E3%82%87%E3%81%86
見まね物まねで書いてとりあえず動いた。
ここからScopeを外す処理をすればいいのだろうか・・・・。