ブックマーク / qiita.com/paming (4)

  • Autolayoutを使ったUITableViewCellの高さ計算を「手動」で行う実装 - Qiita

    iOS8からのTableViewCellの高さ自動計算は、上スクロールした時にはうまく動かない件で、UITableViewCellの高さ自動計算でハマる場合がある事がわかりました。 これを回避するには、estimatedHeightを使わずに、真面目に高さ計算を行えば良いです。 Autolayoutが無い時代には、これをごりごりと計算していたのですが、UITableViewCellにAutolayoutを使う事で、かなり簡略化できたのでその記録を残します。 おおまかな流れ UITableViewDataSourceから参照できる所に、「表示する事の無い、高さ計算用のダミーセル」を用意します。 tableView:heightForRowAtIndexPath: で、ダミーセルを使って高さ計算を行います。 このときAutolayoutで計算ができるので、比較的楽です。 ソース - (void

    Autolayoutを使ったUITableViewCellの高さ計算を「手動」で行う実装 - Qiita
    yfnt
    yfnt 2015/06/29
  • お遊び:UIViewのsubviewsから、特定のプロトコルを持つUIViewを探してくる - Qiita

    最初、【IOS備忘録】UISearchBarのテキストが空の状態で検索ボタンを有効にするをやりたかったのです。ですがiOS7時代だと、TextFieldがsubviewsの下の下の方に潜り込んでいるようで、このままでは動きません。 探してピンポイントで拾ってきても良いのですが、subviewsの中を再帰的に探してくる方が、楽しいじゃないですか。わくわくするじゃないですか。 というわけで、Underscore.mを使って、特定のプロトコルを実装したsubviewsを探してくるものを作りました。 @interface UIView(Util) -(NSArray *)viewsFromSubviewsByMatchProtocol:(Protocol *)protocol; @end @implementation UIView(Util) -(NSArray *)viewsFromSubvi

    お遊び:UIViewのsubviewsから、特定のプロトコルを持つUIViewを探してくる - Qiita
    yfnt
    yfnt 2014/01/29
  • 既存クラスのメソッドを入れ替える(Method Swizzling) - Qiita

    状況: 画面が10個ほどあるiPhoneアプリ UIViewControllerのviewWillAppear等にログを仕込みたい。 すでにUIViewControllerを継承したクラスが多数あって、全部にログを仕込むのはめんどくさいしダサくていやだ。 解決策: method_exchangeImplementationsでメソッドを入れ替えてしまえばいいよ! 黒魔法へようこそ Objective-C Runtime には、method_exchangeImplementations()という関数が用意されています。これで「メソッドの交換」が可能となります。これはSDKで提供されているクラスのメソッドも入れ替える事が可能です。なのでUIViewControllerのviewWillAppear等を自作メソッドと差し替える事が出来ます。この差し替えは、動的に行われるので、動作する環境に応じ

    既存クラスのメソッドを入れ替える(Method Swizzling) - Qiita
    yfnt
    yfnt 2013/12/19
  • (模索中)リファクタリング:パラメタの受け渡し用NSDictionaryを専用クラス化する方法 - Qiita

    お願い もっと良い方法があるよ!こうすると楽だよ!ここ間違ってるよ!等があればコメントください。やり方を模索中です ある日ソースコードを見てると、こんなソースを見つけました。 -(void)methodA { NSDictionary *userInfo; NSURL *imageUrl; NSString *appid; NSMutableDictionary *param = [NSMutableDictionary dictionary]; [param setObject:userInfo forKey:@"userInfo"]; [param setObject:imageUrl forKey:@"imageUrl"]; [param setObject:appid forKey:@"appid"]; [self methodBWithParam:param]; } -(void

    (模索中)リファクタリング:パラメタの受け渡し用NSDictionaryを専用クラス化する方法 - Qiita
    yfnt
    yfnt 2013/10/17
  • 1