ios

UILabel と UITextField を配置したカスタムセルを自作した

登録画面で使うために、UILabel と UITextField を配置したカスタムセルを、コードだけで実装してみた。 Xamarin.Forms なら EntryCell があるけど、あいにく Xamarin.iOS で開発しているアプリなもので。 レイアウトはもちろん AutoLayout を使ってる。ただ…

UINavigationController の rootViewController を変更する

UINavigationController の setViewControllers メソッドを使って、ごっそり入れ替えればいい。 以下サンプルコード。Xamarin.iOS だけど。 NavigationController.SetViewControllers( new [] { newRootViewController }, animated);

Bitbucket の iOS クライアントは CodeBucket で決まり

Bitbucket の iOS クライアント『CodeBucket』がいつの間にか無料になっていた。 codebucket.dillonbuchanan.com Bitbucket の iOS クライアントといえば、自分でもイシューに特化した『Bitissues』を作って使っていたけど、無料と知って即 CodeBucket に乗…

Bitissues を Swift で実装し直した

春に RubyMotion で実装し直した Bitbucket のイシュー専用クライアント『Bitissues』だけど、 今度は Swift で実装し直した。 BitissuesTakashi Nakamura仕事効率化無料 1 つのアプリを Objective-C、RubyMotion、Swift と 3 つの言語で実装したことになる…

DTCoreText で NSAttributedString を高速に描画

先日、HTML 文字列を NSAttributedString に変換する方法を書いた。 HTML を NSAttributedString に変換する - present NSAttributedString を UILabel の attributedText にセットするだけで、 お手軽に HTML を表示できるけど、UILabel は描画が非常に遅い…

HTML を NSAttributedString に変換する

HTML の文字列は let html = "<h1><a href=\"http://tnakamura.hatenablog.com\">Title</a></h1>" + "<ul>" + "<li><strong>Item1</strong></li>" + "<li><i>Item2</i></li>" + "</ul>" let data = html.dataUsingEncoding( NSUTF8StringEncoding, allowLossyConversion: true) let attrStr = NSAttributedString(HTMLData: data…

AFNetworking と ReactiveCocoa を組み合わせる

ReactiveCocoa を導入したからには使い倒す方針でやっていて、 AFNetworking を使った Web API 呼び出しは、次のようにして RACSignal 化している。 let signal = RACSignal.createSignal({ (subscriber) -> RACDisposable! in let manager = AFHTTPRequestO…

Swift で ReactiveCocoa を使う

はじめに Swift で iOS アプリを実装し直すにあたって、 ただ Swift に翻訳するだけではつまらないので、 MVVM アーキテクチャで実装することに決めた。 View/ViewController と ViewModel のバインド、 イベントや非同期 API 呼び出しのインタフェースを統…

Swift で AFNetworking を使う

CocoaPods で AFNetworking をインストール Podfile に pod "AFNetworking" を追加して pod install 実行。 Bridging-Header で AFNetworking のヘッダーをインポート <プロジェクト名>-Bridging-Header.h に #import <AFNetworking/AFNetworking.h> #import <AFNetworking/UIImageView+AFNetworking.h> を追加。 画像の非同期ダウン</afnetworking/uiimageview+afnetworking.h></afnetworking/afnetworking.h>…

UITableView 編集時に挿入用の行を表示したい

UITableView 編集時のみ、挿入用の行を表示したい。こんなやつ。 アイコン自体は tableView:editingStyleForRowAtIndexPath で UITableViewCellEditingStyleInsert を返せば表示できる。 ただ、編集時のみ挿入用の行を表示するとなると、結構面倒だった。 以…

Bitissues を RubyMotion で書き直してリリース

Objective-C で作っていた Bitbucket Issues の iOS クライアント『Bitissues』を RubyMotion で書き直した。 Apple の審査もすんなり通過。 これが初めてリリースする RubyMotion 製アプリになる。 今回のリリースで、ようやくイシューのステータスを変更で…

UITableView のセパレーターの描画がおかしい

ios

まずはこれを見て欲しい。 UITableView のセパレーターがおかしなことになっている。 左端に隙間が開いているものもあれば、左端までぴったり線が描画されているものもある。 左端までぴったり線が描画されているものは、線も少し太い。 UITableView の sepa…

RubyMotion でリポジトリに含めたくない設定を外部ファイルに抜き出す

Web API の consumer_key と consumer_secret のような、 人に知られたくないキーは Git リポジトリに含めたくない。 そこでキーを git リポジトリ管理外の設定ファイルに抜き出すことにした。 設定ファイルを読み込んで RubyMotion でいい感じに扱うための …

MBProgressHUD を使ったローディング表示

iOS アプリがサーバーと通信している間ローディング表示を出すために、 MBProgressHUD を導入することにした。 jdg/MBProgressHUD MBProgressHUD の基本的な使い方。 まずサブビューに追加し、 self.hud = [[MBProgressHUD alloc] initWithView:self.view]; …

AFNetworking 2.x の AFHTTPRequestOperationManager でベーシック認証に対応する

ベーシック認証のユーザー名とパスワードは、AFHTTPRequestSerializer にセットすればいい。 AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:url]; manager.requestSerializer = [[AFHTTPRequestSeriali…

Objective-C コードで Auto Layout を設定するためのライブラリを書いた

Xcode 5 になって、InterfaceBuilder や Storyboard で Auto Layout を設定しやすくなったけど、 コードで Auto Layout 設定したいときが稀にある。 例えば自分の場合、継承して使いまわすことを前提に View や ViewController のベースクラスを作るときとか…

AutoLayout で UIImageView の幅を固定したのに横長の画像を表示すると幅が変わってしまう

AutoLayout で UIImageView の幅を 80 に固定 UIImageView の contentMode は UIViewContentModeScaleAspectFill このとき、縦よりも横の幅がかなり長い画像を表示すると、UIImageView の幅が変わってしまった。 調べたところ、縦横のアスペクト比が違う場合…

依存ファイルの自動解決に失敗したときは motion-require

RubyMotion は Smart File Dependencies 機能があるので、依存ファイルを自動で解決してくれる。 でも、たま~に解決できなくて定数未定義エラーに遭遇するときがある。 そんなときは Rakefile で files_dependencies を記述すればいいんだけど、 依存してい…

ADBannerView の delegate を Storyboard で設定しない方がいい?

審査でリジェクトを受けて発覚したんだけど、 Storyboard で ViewController に ADBannerView を配置 Storyboard で ViewController を ADBannerView の delegate に設定 ViewController に ADBannerViewDelegate のメソッドを実装 ADBannerViewDelegate の…

AutoLayout を使って ADBannerView を配置する方法

ADBannerView は広告取得に失敗したら隠さないと、レビューでリジェクトされてしまう。 今までは広告取得に失敗したら frame を操作して画面外に移動していた。そのためのモジュールを Objective-C で書いたりもした。でも最近は AutoLayout を使うようにし…

Teacup の AutoLayout サポートを使ってカスタム UITableViewCell をレイアウトする

RubyMotion 用 gem の Teacup は、CSS っぽくビューのデザインを記述できる、 厳密にはビューのプロパティを設定するための内部 DSL。 なんと AutoLayout もサポートしていたりする。 rubymotion/teacup Teacup の AutoLayout を使って、カスタム UITableVie…

CoreDataQuery と NSFetchedResultsController を組み合わせる

CoreData でデータをフェッチするときは NSFetchedResultsController を使いたいけど、 CoreDataQuery には NSFetchedResultsController を取得するメソッドが無い。 その代わり NSFetchRequest は取得できるから、 CDQQuery っていう CoreDataQuery 内部で…

CoreDataQuery は気に入らなくても ruby-xcdm は使ったほうがいい

RubyMotion 用の CoreData ラッパー gem である CoreDataQuery を先日から使い始めた。当初は理想の gem に出会ったと思っていたが、使っているうちに気に入らない箇所がちらほら。 自分は Named Scope が使いたいので多少の不満には目を瞑っている。でも人…

Objective-C で YAML を扱うなら YAML-Framework が手軽

mirek/YAML.framework CocoaPods でインストールできる LibYAML のラッパーで、Objective-C っぽい API を提供している。 YAML のパースはこんな感じ。 NSString *yamlText = @"- title: 第一章\n" " articles:\n" " - title: 第一話\n" " path: Story1\n" "…

Objective-C での日付操作が苦行過ぎるので NSDate-Escort を導入した

Objective-C の日付操作では NSDate だけじゃなく NSDateComponents や NSCalendar が登場してきて、 その面倒くささはもはや苦行。 そもそも、簡単に年や月を取得できない NSDate の API がイケてない。 日付操作をもっと手軽にやりたい。 もう自分でライブ…

CoreDataQuery は求めていた gem かもしれない

CoreDataQuery という CoreData ラッパー gem が公開された CoreDataQuery - CDQ | InfiniteRed 開発元は RubyMotionQuery と同じ InfiniteRed。 RubyMotion ではラッパー gem じゃなくて、MagicalRecord や NLCoreData のような Objective-C のライブラリを…

自作ライブラリを CocoaPods でインストールできるようにした

ADBannerView を画面下に配置するオレオレライブラリ TNAAdController を使うとき、 ファイルをプロジェクトに追加して使っていた。 これだとソースコードが分散してしまって、コピペと変わらない。 よろしくないので、CocoaPods でインストールできるように…

UITableView の下に ADBannerView を配置するだけのライブラリ書いた

UITableView の下に ADBannerView を置くのは、無料+広告アプリでは定番レイアウト。 自分が作る iOS アプリでも採用している。 以前、 っていう記事を書いたけど、この方法はもう使っていない。 UITableView のフッターを設定しているので、表示データが 0 …

Objective-C のカテゴリでプロパティを定義する方法のメモ

objc/runtime.h で定義されている、objc_getAssociatedObject メソッドと objc_setAssociatedObject を使う。 #import <UIKit/UIKit.h> @interface UIViewController (SideMenu) @property (nonatomic, readonly) UIBarButtonItem *menuButtonItem; @end #import "UIViewCon</uikit/uikit.h>…

RubyMotion で MagicalRecord を使う

最近、RubyMotion 向けのラッパー gem じゃなくて、 Objective-C のライブラリを使ったほうがいいのでは、って思うようになってきた。 CoreData なら MotionData や MotionDataWrapper じゃなくて MagicalRecord。 そこで RubyMotion で MagicalRecord が使…