Objective-Cのあるひとつのメソッド内のあちこちで実行される処理があるような時に、ブロックを変数に入れて何ヶ所かで呼び出したい時がある。書き方をよく忘れるので、Objective-CでBlockを変数に入れる方法の具体例を挙げる。
カテゴリー: プログラミング
星でレーティングするAXRatingViewをつくった
https://github.com/akiroom/AXRatingView
iOSアプリを作っていて星をタップしてレーティングできるビューが欲しかったのですが、フラットデザインっぽい感じで色々設定できるようなライブラリが見つからなかったので、自分で作りました。上のスクリーンショットを見ていただければ分かる通り、以下のような特長があります。
- 漸次的/段階的なレーティング
- 自由な文字を設定できる
- 自由な画像を設定できる
- editable/non-editableの切り替えが可能
- 星の数を増減できる
- addTarget:action:forControlEvents:で簡単に変更の通知イベントを割り当てられる
- ★マークのような画像リソースの用意が不要
ソースコードのダウンロードは以下のURLからできます。
https://github.com/akiroom/AXRatingView
既にcocoapodsに登録済みなので、Podfileに次のように書いてpod installすればすぐに使えます。
pod 'AXRatingView', '~> 0.9.4'
Rubyで浮動小数点数の加算減算がずれないようにする
問題
Rubyで0.1を足していくと、計算結果がずれるという問題が起きた。例えば、以下のようなコードを書くと、期待しているような計算結果が得られない。
> tmp = 0.0 => 0.0 > 1..10.times { p tmp += 0.1 } 0.1 0.2 0.30000000000000004 0.4 0.5 0.6 0.7 0.7999999999999999 0.8999999999999999 0.9999999999999999 => 1..10
Excelですぐ開けるUnicodeなCSVをRubyで生成する
Excelで開ける、Unicode文字列を含むCSVファイルを生成する方法。Microsoft Excel for Mac 2011で開けることを確認した。
Excelで開けるUnicode文書を作るポイントは以下の2点。
- UTF-16 LE with BOMで保存する
- UTF-8は文字化けして、UTF-16 BEはフリーズした
- タブ区切りで保存する
- カンマを使う場合はテキストファイルウィザードを使わなければならない
heightForHeaderInSection:とheightForFooterInSection:のデフォルト値
UITableViewControllerの中でヘッダーやフッターの高さを変えたいけど、デフォルトの高さも使いたい時。UITableViewAutomaticDimensionを返せばよい。
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { if (section == 0) { return 32.0; } else { return UITableViewAutomaticDimension; } }
Xcodeが起動中にフリーズする時の解決方法
Xcodeが「Welcome to Xcode」の画面を出す前の何もダイアログがない状態でフリーズして、まったく起動しなくなってしまった。
NSStringが指定した文字のみで構成されているかチェック
NSStringが特定の文字だけで構成されているか判定したいことがある。文字種だけの問題で正規表現を使う程ではない、という時は、NSCharacterSetの包含関係の判定を使うと簡単にチェックできる。パスワードのValidationとか、UITextFieldに数字のみを受け付ける場合のちょっとしたチェックなどに便利。
gitで差分を抽出してpatchで使えるファイルを生成
gitで差分を抽出してpatchで使えるファイルを生成したい時、毎回同じ検索ワードで検索して、毎回同じサイトを見ていたので、自分用にメモ。普通のpatchコマンドで取り込めるdiffファイルをgitで作成する – kanonjiの日記という記事が自分にとって一番分かりやすかった。このページを参考に、自分が使う用に書いておく。
$ # ファイルを生成 $ git diff (diffの方法) > (パッチ名.patch) $ # 実行結果を確認 $ patch --dry-run -p1例
$ git diff develop features/dummy > diff.patch $ patch --dry-run -p1gitに関する書籍
StoryboardのTableViewでセルがはみ出して操作できない
StoryboardにUITableViewControllerを置いて、Prototype Cellを設定している時、様々な種類のセルを設定しているうちに、ViewControllerの高さが足りなくて下の方の要素が見られないことがある。その時の対処法。
以下の記事を参考にしたら解決した。
Can’t scroll to the bottom of a long Static TableViewController in XCode 5 Interface Builder to edit the cells below the fold
StoryBoard上でスクロールできるようにしたいViewControllerを選択して、Attributes InspectorのView ControllerのExtend Edgesの中にある”Under Top Bars”と”Under Bottom Bars”のチェックを外す。
この2つのチェックを外すと、TableViewの上でスクロールできるようになる。
Thanks to @shao1555!
railsでsanitizeすると閉じタグを付け忘れた時にタグが続いてしまう
sanitizeというメソッドを使うと、ホワイトリストに載ったHTMLタグ以外を削除して出力できる。例えば以下のようなコード(haml)を書くと、
%p - dummy_text = '斜め' = raw(sanitize(dummy_text))
斜め
と出力される。
通常はこれで問題ないが、タグが閉じられないままだと、続けて出力されてしまう。
%p - dummy_texts = ['<i>斜め' '斜めったまま'] - dummy_texts.each do |dummy_text| %p = raw(sanitize(dummy_text))
↓こんな感じ。
斜め 斜めったまま
つまり、validではないHTMLをvalidにするにはどうすればいいかという問題。