User Defined Runtime Attributeについての覚書
公開日:
:
最終更新日:2015/03/06
Tips InterfaceBuilder, UILabel, UserDefinedRuntimeAttribute
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」にプロパティの名前と値を入れておけば、きちんと反映されることがわかりました。
ハイライトしてる部分が設定したプロパティになります。
このプロパティを複数のコンポーネントにいちいち書くのも面倒なのですが、ハイライトした状態でコピー(Command+C)が可能なので、コピーしてペースト先のコンポーネントの(空の)User Defined Runtime Attributeをクリックしてからペースト(Command+V)すると、プロパティがペーストされるので、そこまで手間なくコンポーネントの設定ができました。
正直UILabelにedge設定があるのが理想で、こういうテクニックで乗り越えるのは好みではないのですが、UILabelの下に空のUIViewを置いて、edge分を考慮した透明背景のUILabelを置くみたいなテクニックよりはかなりマシだとは思います。
関連記事
-
-
ENMLからHTMLへの変換
最近EvernoteAPIをいじっているので、コレに関するノウハウをとりあえず断片的に引っかかったと
-
-
CALayerの管理
CALayerはNSKeyValueCodingを実装している(Core Animation Ext
-
-
bitbucketをXcode5で使用する
bitbucketは無償で5人までの少人数チーム用のクローズド(非公開)リポジトリを作成できるため、
-
-
画面回転をしたあとに、UITextViewの先頭を表示する
回転によりサイズが可変するUITextViewで、縦向き(ポートレイト)から横向き(ランドスケープ)
-
-
HTMLParserを修正する
HTMLスクレイピングしてる時に役立つライブラリであるObjective-C-HMTL-Parser
-
-
iOS9でURLスキームを登録する
私事ですが、iOS8から対応はしたいということで検証用に使っている自分のiPhoneもiOS8でがん
-
-
アプリ内で自動スリープの設定を無効化する
「設定」アプリ内で設定したスリープ時間設定を無効にするためのコード。 アプリがバックグラウンドにな
-
-
Bitbucketの画面の日本語化/コミット時に同時プッシュを行う
前回の記事の続きで、Bitbucketの画面の日本語化と、Xcodeでコミットするときに同時にpus
-
-
GoogleスプレッドシートからCSVにエクスポートしたデータを得る方法
情報がない中さんざ苦労しましたが、Googleスプレッドシート(の最初のシート)をCSVとしてエクス
-
-
WSCoachMarksViewをSwiftで使う場合の手順
Objective-Cで記述されてるライブラリ全般に当てはまることもあるんですが、個別でやることも含

