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を置くみたいなテクニックよりはかなりマシだとは思います。
関連記事
-
-
UICollectionViewが画面回転した時にレイアウトが崩れた時の対応
UICollectionViewCellのサイズを、内容に合わせて動的に変えた時に起こる問題に関して
-
-
Bitbucket課題の記法サンプル
Bitbucketの課題、およびwikiで利用できる記法についての記事です。 利用できる記法に
-
-
AVAudioPlayerの初回再生遅延
ちょっとした効果音の再生にAVAudioPlayerを使っているのですが、どうも初回の効果音ロードの
-
-
UITableViewのヘッダに小文字を入れる
UITableViewのセクションヘッダをStoryboardでカスタマイズするという話題を以前掲載
-
-
実機テストしたときのデータを取り出す
Xcodeでコンパイルして実機テストしている場合に、テストデータを実機から取り出す方法です。 以下
-
-
UIAlertControllerの取り扱い
旧聞ですが日本語版のStackOverflowが始動したようですね。 個人的な印象は「フィルタされ
-
-
バージョンアップ版があることを通知する
拍子抜けするほど簡単だったので、「アプリのバージョンアップの通知をどうするか」という話についてTip
-
-
コードでiPhone6 Plusを識別する簡単な方法
表題の通り、コードでiPhone6 Plusを識別する簡単な方法です。 iPhone6 Plu
-
-
iOSシミュレータの帯域制限をテストする
iOSシミュレータで通信帯域制限をテストしたいと思ったんですが、Xcode8からXcode7.xとは
-
-
Xcode10からのimage literal / color literalの指定方法
アセットにあるUIImageの直接指定が可能なImage literalですが、気がついたらアセット

