Label ja - Tai-Kimura/SwiftJsonUI GitHub Wiki

🇺🇸 English | 🇯🇵 日本語

Label

class: SJUILabel
inherits: UILabel

Label の属性

属性名 UIKit SwiftUI Compose XML jsonでの型 詳細 備考
edgeInset string/array Float配列または「 」で区切られた文字列がlabel.paddingに設定されます。
配列のサイズが1の場合、同じ値がすべての位置に適用されます。
配列のサイズが2の場合、最初の値が上下に、2番目の値が左右に設定されます。
配列のサイズが3の場合、インデックスと位置は:
0: 上
1: 左右
2: 下
配列のサイズが4の場合、インデックスと位置は:
0: 上
1: 左
2: 下
3: 右
lines integer label.numberOfLines。
lineBreakMode string label.lineBreakMode。オプション:
Char: NSLineBreakMode.byCharWrapping
Clip: NSLineBreakMode.byClipping
Word: NSLineBreakMode.byWordWrapping
Head: NSLineBreakMode.byTruncatingHead
Middle: NSLineBreakMode.byTruncatingMiddle
Tail: NSLineBreakMode.byTruncatingTail
textAlign string paragraphStyle.alignment。オプション:
Left: NSTextAlignment.left
Right: NSTextAlignment.right
Center: NSTextAlignment.center
underline JSON アンダーラインのJSON。利用可能な属性はこちら
strikethrough JSON 取り消し線のJSON。利用可能な属性はこちら
lineHeightMultiple float paragraphStyle.lineHeightMultiple。
font string ラベルのフォント名。
fontSize float ラベルのフォントサイズ。
fontColor string NSAttributedStringKey.foregroundColor。
textShadow string NSAttributedStringKey.shadow。利用可能なキー:
color: shadowColor(16進文字列)
offset: shadowOffset.xが最初の値、shadowOffset.yが2番目の値(float配列)
blur: shadowBlurRadius(float)
text string NSLocalizedString(text, comment:"")がattributedTextに設定されます。
partialAttributes JSON array テキストの部分属性。利用可能な属性はこちら
highlightAttributes JSON テキストのハイライト属性。これらの属性はapplyAttributedTextが呼び出され、選択されている場合に適用されます。利用可能な属性:font、fontSize、fontColor
highlightColor string 選択状態のフォント色。highlightAttributesが定義されている場合、この属性は無視されます。
hintAttributes JSON テキストのヒント属性。これらの属性はヒントが表示される際に適用されます。利用可能な属性:font、fontSize、fontColor
hintColor string ヒントのフォント色。hintAttributesが定義されている場合、この属性は無視されます。
autoShrink boolean label.adjustsFontSizeToFitWidth。
minimumScaleFactor float label.minimumScaleFactor。
この属性はautoShrinkがtrueの場合にのみ有効です。
onclick string この属性でonclickイベントを定義できます。この属性で作成されたセレクターがUITapGestureRecognizerに設定され、UITapGestureRecognizerがラベルに追加されます。
linkable boolean label.linkable。trueの場合、テキスト内のURLがクリック可能になります。
hint string ラベルのテキストが空の場合に表示するヒントテキスト。
属性名 制約情報での
データ型
JSONでの
詳細 備考
lineStyle - string NSAttributedStringKey.underlineStyle。リストは以下の通り。
Single: NSUnderlineStyle.styleSingle
Double: NSUnderlineStyle.styleDouble
Thick: NSUnderlineStyle.styleThick
None: NSUnderlineStyle.styleNone
デフォルトはNSUnderlineStyle.styleSingle
color - string NSAttributedStringKey.underlineColor。
lineOffset - string NSAttributedStringKey.baselineOffset。
属性名 制約情報での
データ型
JSONでの
詳細 備考
lineStyle - string NSAttributedStringKey.strikethroughStyle。リストは以下の通り。
Single: NSUnderlineStyle.styleSingle
Double: NSUnderlineStyle.styleDouble
Thick: NSUnderlineStyle.styleThick
None: NSUnderlineStyle.styleNone
デフォルトはNSUnderlineStyle.styleSingle
color - string NSAttributedStringKey.strikethroughColor。
属性名 制約情報での
データ型
JSONでの
詳細 備考
font - string ラベルのフォント名。
fontSize - float ラベルのフォントサイズ。
fontColor - string NSAttributedStringKey.foregroundColor。
lineSpacing - float paragraphStyle.lineSpacing。
lineHeightMultiple - float paragraphStyle.lineHeightMultiple。
lineBreakMode - string label.lineBreakMode。オプション:
Char: NSLineBreakMode.byCharWrapping
Clip: NSLineBreakMode.byClipping
Word: NSLineBreakMode.byWordWrapping
Head: NSLineBreakMode.byTruncatingHead
Middle: NSLineBreakMode.byTruncatingMiddle
Tail: NSLineBreakMode.byTruncatingTail
textAlign - string paragraphStyle.alignment。オプション:
Left: NSTextAlignment.left
Right: NSTextAlignment.right
Center: NSTextAlignment.center
underline - JSON アンダーラインのJSON。利用可能な属性はこちら
textShadow - string NSAttributedStringKey.shadow。利用可能なキー:
color: shadowColor(16進文字列)
offset: shadowOffset.xが最初の値、shadowOffset.yが2番目の値(float配列)
blur: shadowBlurRadius(float)
range - JSON array 上記の属性はここで定義された範囲に適用されます。範囲内のテキストにonclickイベントを追加することもできます。

binding_builderでpartialAttributesを使用する

@{}構文を使用してpartialAttributesの範囲に動的に値をバインドできます:

例1:データバインディングによる動的範囲

{
  "type": "Label",
  "id": "price_label",
  "text": "合計: $99.99 (20%節約)",
  "data": [
    {
      "name": "priceStart",
      "class": "Int",
      "defaultValue": 4
    },
    {
      "name": "priceEnd",
      "class": "Int",
      "defaultValue": 10
    }
  ],
  "partialAttributes": [
    {
      "fontColor": "#FF0000",
      "fontSize": 20,
      "font": "bold",
      "range": ["@{priceStart}", "@{priceEnd}"]
    },
    {
      "fontColor": "#00AA00",
      "fontSize": 14,
      "range": [12, 18]
    }
  ]
}

これにより、範囲を動的に更新するバインディングコードが生成されます:

priceLabel?.partialAttributesJSON?[0]["range"][0] = JSON(priceStart)
priceLabel?.partialAttributesJSON?[0]["range"][1] = JSON(priceEnd)

例2:複雑な部分属性

{
  "type": "Label",
  "id": "terms_label",
  "text": "同意をクリックすることで、利用規約とプライバシーポリシーに同意したものとみなされます",
  "fontSize": 14,
  "fontColor": "#333333",
  "data": [
    {
      "name": "termsStart",
      "class": "Int",
      "defaultValue": 14
    },
    {
      "name": "termsEnd",
      "class": "Int",
      "defaultValue": 18
    },
    {
      "name": "privacyStart",
      "class": "Int",
      "defaultValue": 19
    },
    {
      "name": "privacyEnd",
      "class": "Int",
      "defaultValue": 30
    }
  ],
  "partialAttributes": [
    {
      "fontColor": "#0066CC",
      "underline": {
        "lineStyle": "Single",
        "color": "#0066CC"
      },
      "range": ["@{termsStart}", "@{termsEnd}"],
      "onclick": "openTerms"
    },
    {
      "fontColor": "#0066CC",
      "underline": {
        "lineStyle": "Single",
        "color": "#0066CC"
      },
      "range": ["@{privacyStart}", "@{privacyEnd}"],
      "onclick": "openPrivacy"
    }
  ]
}

例3:検索結果のハイライト

{
  "type": "Label",
  "id": "search_result_label",
  "text": "Swiftは強力で直感的なプログラミング言語です",
  "binding_group": ["search"],
  "data": [
    {
      "name": "searchResultRanges",
      "class": "[Int]",
      "defaultValue": []
    }
  ],
  "partialAttributes": [
    {
      "fontColor": "#FF6600",
      "backgroundColor": "#FFFF00",
      "range": "@{searchResultRanges}"
    }
  ]
}

ViewControllerで:

// 検索ハイライトを更新
_binding.searchResultRanges = [0, 5, 11, 18]  // "Swift"と"プログラミング"をハイライト
_binding.invalidateSearch()

バインディングでpartialAttributesを使用する際の注意事項

  • range配列には、@{}を使用した静的な数値または動的バインディングのいずれかを含めることができます
  • range@{}を使用する場合、変数はIntまたは[Int]型である必要があります
  • バインディングはpartialAttributesJSONプロパティを更新し、テキストがレンダリングされる際に適用されます
  • 同じpartialAttributes配列内で静的値と動的値を混在させることができます

Label のプロパティ

静的プロパティ

open class var viewClass: SJUILabel.Type

このプロパティは、createFromJSONメソッドでどのクラスをインフレートするかを決定するために使用されます。 SJUILabelを継承するクラスを作成する際は、このプロパティでビューのクラスを定義する必要があります。

static var defaultLinkColor: UIColor

リンクのデフォルト色(blue)。linkableがtrueで色が指定されていない場合に使用されます。

static var verticalAdjustmentByFonts: [String:CGFloat]

フォント別の垂直位置調整辞書。フォントごとのテキスト位置の微調整に使用されます。

インスタンスプロパティ

public var hint: String?

メインテキストが空の場合に表示されるプレースホルダーテキスト。説明は属性テーブルを参照してください。

public var selected: Bool

使用する属性(通常またはハイライト)を決定する選択状態。

public var attributes: [NSAttributedString.Key:NSObject]!

このプロパティはラベルの通常状態の属性を格納します。attributedTextを設定したい場合は、attributedTextを直接設定する代わりにapplyAttributedTextを呼び出してください。
このプロパティは属性付きテキストを作成するために使用されます。

public var highlightAttributes: [NSAttributedString.Key:NSObject]!

applyAttributedTextが呼び出され、ラベルが選択されている場合に使用される属性。

public var hintAttributes: [NSAttributedString.Key:NSObject]?

ヒントが表示される際のテキスト属性。

public var partialAttributesJSON: [JSON]?

JSONベースの部分テキストスタイル設定。JSONで定義された部分属性を格納します。

public var linkable: Bool

このプロパティがtrueの場合、テキスト内のURLが自動的に検出され、クリック可能になります。

public var touchedURL: URL?

リンク可能テキストでタッチされたURL。リンクがタップされた後に利用可能です。

public var linkedRanges: [[String:Any]]

関連するアクションとプロパティを持つリンクテキスト範囲の配列。

public weak var touchDelegate: UIViewTapDelegate?

ラベルのタッチイベントを処理するデリゲート。

public weak var linkHandleDelegate: NSObject?

linkableが有効な場合のリンククリックイベントを処理するオブジェクト。

public var padding: UIEdgeInsets

テキストレンダリングの内部パディング。テキストとそのフレーム間のスペース。

オーバーライドプロパティ

override var intrinsicContentSize: CGSize { get }

パディング調整を含むコンテンツサイズの計算。

override var alignmentRectInsets: UIEdgeInsets { get }

適切なレイアウト配置のためのアラインメント矩形インセット。

Label の関数

静的メソッド

public class func createFromJSON(attr: JSON, target: Any, views: inout [String: UIView]) -> SJUILabel

ラベルがJSONファイルから作成される際に呼び出されるファクトリメソッド。
SJUILabelクラスを継承するクラスを作成する際は、このメソッドをオーバーライドしてください。

インスタンスメソッド

open func applyAttributedText(_ text: String!)

適切な属性処理でattributedTextを設定するためにこのメソッドを呼び出してください。

  • 通常状態ではattributesを使用
  • selectedがtrueの場合はhighlightAttributesを使用
  • テキストが空でhintが提供されている場合はhintAttributesを使用
  • partialAttributesJSONから部分属性を処理
open func applyLinkableAttributedText(_ text: String!, withColor color: UIColor = defaultLinkColor)

自動リンク検出とスタイル設定でattributedTextを設定するためにこのメソッドを呼び出してください。
テキスト内のURLが指定された色でクリック可能になります。

func characterIndexAtPoint(_ touchPoint: CGPoint) -> Int?

指定されたタッチポイントの文字インデックスを返します。特定のテキスト範囲でのタッチ処理に使用されます。

オーバーライドメソッド

override func drawText(in rect: CGRect)

パディングを適用し、特殊レンダリングを処理するカスタムテキスト描画実装。

override func sizeThatFits(_ size: CGSize) -> CGSize

最終サイズにパディングを含むサイズ計算。

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?)
override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?)
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?)
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?)

リンク検出とタップイベントのためのタッチ処理メソッド。

override func onBeginTap()
override func onEndTap()

SJUIViewから継承されたカスタムタッチ開始・終了処理。

イベントハンドラー

@objc func onLinkTap(_ sender: UITapGestureRecognizer)

linkableが有効な場合のクリック可能リンクのタップイベントを処理します。

⚠️ **GitHub.com Fallback** ⚠️