自動で置かれた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をいじっていると時々こんなものに出くわします。
キーボードの上に青い「完了ボタン」やら「前へボタン」「次ボタン」などが配置してあることがあります。
改行などするテキストボックスなどにあると非常に便利ですね。
キーボードの近くにあるので、すぐに操作ができる。
これどうやるんだろうとグーグルを検索してどのページを見ても「ナビゲートバーに閉じるボタンを配置して・・・・・・・」みたいなことしか書かれていません。
確かにそれでも出来るんですが、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;
- toolBar.barStyle = UIBarStyleBlackOpaque;
- toolBar.barStyle = UIBarStyleBlackTranslucent;
- toolBar.barStyle = UIBarStyleDefault;
BlackとBlackOpaqueの違いがよくわかりませんね(笑)
Googleで「Objective-C(もしくはiPhone、XCode)、キーボード ツールバー(もしくは間にスペースなしで「キーボードツールバー」」と検索すると色々なやり方が出てきます。
「キーボード 完了ボタン」で最初検索していたのでなかなか出てこなくて苦労しました。
参考ページは
http://works.sabitori.com/2011/06/18/add-button-to-keyboard/
色々なページを参考に四苦八苦やってみましたが、このページを見て拍子抜けしました。
ここではやり方を二つ紹介していました。
参考にされてみてはいかがでしょうか。
iPhoneでデータベースって使えるの?sqllite
現在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ができる。
なので言語毎にスコープバーの設定を外さないとダメらしい。
左のプロジェクト領域を見てもらえば分かる通り、StoryBoardは言語毎にできる。
英語対応は消していても
日本語対応には残っていることがある
恐るべし、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の設定方法)
ファイルがフォルダの外にある!
今朝の続きをやろうと思ったら、一部ファイルがフォルダの外にあった。
ファイルを移動したいのだが、どうしたらいいのだろうか?
やはり素晴らしいページがありました。
ファイルを移動してリンクを張り替えればいいらしい。
やり方はこちら。
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を外す処理をすればいいのだろうか・・・・。