*

User Defined Runtime Attributeについての覚書

公開日: : 最終更新日:2015/03/06 Tips , ,

UILabelに上下左右のパディングをつける方法を探して、結局「自分で以下のようなメソッドを持った拡張クラスを作る」という結論になりました。edgeTop, edgeLeft, edgeBottom, edgeRightはこのクラスに追加したプロパティです。

- (void)drawTextInRect:(CGRect)rect
{

    UIEdgeInsets insets = {self.edgeTop, self.edgeLeft, self.edgeBottom, self.edgeRight};
    
    return [super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)];
}

次に、storyboardにこのクラスのラベルを設置した時にこれらのプロパティを設定したいとなるわけですが、IBではCustom Classの設定で設置したUILabelを別の(UILabelを継承した)クラスに差し替えることはできても、それだけではプロパティの設定ががIBの画面に出てこないわけなので、ちょっと困ってました。コード側で書くとかやりたくないですし・・・。

そこでなんかないかと調べたところ、Custom Classの下にある「User Defined Runtime Attribute」にプロパティの名前と値を入れておけば、きちんと反映されることがわかりました。

UserDefinedRuntimeAttribute

ハイライトしてる部分が設定したプロパティになります。
このプロパティを複数のコンポーネントにいちいち書くのも面倒なのですが、ハイライトした状態でコピー(Command+C)が可能なので、コピーしてペースト先のコンポーネントの(空の)User Defined Runtime Attributeをクリックしてからペースト(Command+V)すると、プロパティがペーストされるので、そこまで手間なくコンポーネントの設定ができました。

正直UILabelにedge設定があるのが理想で、こういうテクニックで乗り越えるのは好みではないのですが、UILabelの下に空のUIViewを置いて、edge分を考慮した透明背景のUILabelを置くみたいなテクニックよりはかなりマシだとは思います。

関連記事

Bitbucketの画面の日本語化/コミット時に同時プッシュを行う

前回の記事の続きで、Bitbucketの画面の日本語化と、Xcodeでコミットするときに同時にpus

記事を読む

viewDidLoadとviewDidLayoutSubviewsのタイミング

真実の記事にある「コードでiPhone6を識別する」話とほんのちょっとだけ繋がっている話で、view

記事を読む

UITableViewのセルセパレータが画像の下部分だけ切れる場合の対応

iOS7のUItableViewCellだと、UITableView.imageViewに画

記事を読む

plistファイルに色を入れる

plistファイル中にUIColorを入れたい!という場合。普通RGBAの値を数値で入れるとかするけ

記事を読む

iOS7でのPopover内サイズの指定

UIPopover内で表示する場合のViewControllerのコンテンツサイズ設定に関してのメモ

記事を読む

UIAlertControllerの取り扱い

旧聞ですが日本語版のStackOverflowが始動したようですね。 個人的な印象は「フィルタされ

記事を読む

NSAttributedStringをローカライズする方法

NSAttributedStringをLocalizeするうまい方法はないものかと探したら、これが手

記事を読む

メソッドの呼び出し元を調べる

特定のメソッドに関して、そのメソッドをコールしているメソッド群を調べるための手順。 (1)調べたい

記事を読む

UIActionSheetの文字がブレて多重表示される

UIActionsheetを使っていて、iOS7/iPadの組み合わせで起こる不具合らしき挙動が起こ

記事を読む

CoreDataのソートとsectionNameKeyPathの関係

CoreDataをフェッチするときに、indexPathのsectionにできるsectionNam

記事を読む

Xcode10からのimage literal / color literalの指定方法

アセットにあるUIImageの直接指定が可能なImage litera

Xcode11でのバージョン番号の取得方法

Xcode11になってバージョン番号をスクリプトから得て自動で更新する

GoogleスプレッドシートからCSVにエクスポートしたデータを得る方法

情報がない中さんざ苦労しましたが、Googleスプレッドシート(の最初

画面回転をしたあとに、UITextViewの先頭を表示する

回転によりサイズが可変するUITextViewで、縦向き(ポートレイト

NXDrawKitを導入してみる

ACEDrawingViewがObj-Cで書かれていて、いまいちメンテ

→もっと見る

    PAGE TOP ↑