Generally functioning. A ways to go.
This commit is contained in:
parent
f67392eb69
commit
244e3c0df3
@ -40,7 +40,16 @@ public typealias ActionBlock = () -> Void
|
|||||||
//------------------------------------------------------
|
//------------------------------------------------------
|
||||||
|
|
||||||
public var clauses: [ActionableClause] = [] {
|
public var clauses: [ActionableClause] = [] {
|
||||||
didSet { isUserInteractionEnabled = !clauses.isEmpty }
|
didSet {
|
||||||
|
isUserInteractionEnabled = !clauses.isEmpty
|
||||||
|
|
||||||
|
// Accessibility
|
||||||
|
let element = UIAccessibilityElement(accessibilityContainer: self)
|
||||||
|
element.accessibilityFrameInContainerSpace = convert(boundingRect(forCharacterRange: clauses.last!.range!), to: nil) //CGRect(x: 10, y: 10, width: 100, height: 30)
|
||||||
|
element.accessibilityLabel = "Testing"
|
||||||
|
element.accessibilityTraits = .button
|
||||||
|
accessibilityElements?.append(element)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Used for tappable links in the text.
|
/// Used for tappable links in the text.
|
||||||
@ -64,10 +73,7 @@ public typealias ActionBlock = () -> Void
|
|||||||
lineBreakMode = .byWordWrapping
|
lineBreakMode = .byWordWrapping
|
||||||
translatesAutoresizingMaskIntoConstraints = false
|
translatesAutoresizingMaskIntoConstraints = false
|
||||||
isAccessibilityElement = false
|
isAccessibilityElement = false
|
||||||
|
accessibilityElements = []
|
||||||
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(textLinkTapped(_:)))
|
|
||||||
tapGesture.numberOfTapsRequired = 1
|
|
||||||
addGestureRecognizer(tapGesture)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc public init() {
|
@objc public init() {
|
||||||
@ -410,6 +416,7 @@ extension Label {
|
|||||||
originalAttributedString = nil
|
originalAttributedString = nil
|
||||||
hasAttachmentImage = false
|
hasAttachmentImage = false
|
||||||
styleB2(true)
|
styleB2(true)
|
||||||
|
accessibilityElements = []
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc public func setWithJSON(_ json: [AnyHashable: Any]?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) {
|
@objc public func setWithJSON(_ json: [AnyHashable: Any]?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) {
|
||||||
@ -450,6 +457,7 @@ extension Label {
|
|||||||
}
|
}
|
||||||
|
|
||||||
self.attributedText = mutableAttributedString
|
self.attributedText = mutableAttributedString
|
||||||
|
// accessibleClauses = []
|
||||||
clauses = []
|
clauses = []
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -567,38 +575,36 @@ extension UITapGestureRecognizer {
|
|||||||
extension Label {
|
extension Label {
|
||||||
|
|
||||||
override open func accessibilityActivate() -> Bool {
|
override open func accessibilityActivate() -> Bool {
|
||||||
let point = accessibilityActivationPoint
|
// let point = accessibilityActivationPoint
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
open override func accessibilityElementDidBecomeFocused() {
|
open override func accessibilityElementDidBecomeFocused() {
|
||||||
<#code#>
|
|
||||||
}
|
}
|
||||||
|
|
||||||
open override func accessibilityElementCount() -> Int {
|
open override func accessibilityElementCount() -> Int {
|
||||||
return accessibleClauses.count
|
return accessibilityElements?.count ?? 0
|
||||||
}
|
}
|
||||||
|
|
||||||
open override func accessibilityElement(at index: Int) -> Any? {
|
open override func accessibilityElement(at index: Int) -> Any? {
|
||||||
return accessibleClauses[index]
|
return accessibilityElements?[index]
|
||||||
}
|
}
|
||||||
|
|
||||||
open override func index(ofAccessibilityElement element: Any) -> Int {
|
open override func index(ofAccessibilityElement element: Any) -> Int {
|
||||||
return accessibleClauses.firstIndex(of: element as! UIAccessibilityElement)!
|
return 0//accessibilityElements?.firstIndex(of: element as! UIAccessibilityElement)!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
var accessibleClauses: [UIAccessibilityElement] {
|
var accessibleClauses: [UIAccessibilityElement] {
|
||||||
|
|
||||||
var elements = [UIAccessibilityElement]()
|
var elements = [UIAccessibilityElement]()
|
||||||
|
|
||||||
for clause in clauses {
|
for clause in clauses {
|
||||||
|
|
||||||
let element = UIAccessibilityElement(accessibilityContainer: self)
|
let element = UIAccessibilityElement(accessibilityContainer: self)
|
||||||
let rect = CGRect(x: 10, y: 10, width: 100, height: 30)
|
// let rect = CGRect(x: 10, y: 10, width: 100, height: 30)
|
||||||
element.accessibilityFrame = rect
|
element.accessibilityFrame = convert(self.frame, to: nil)
|
||||||
// element.accessibilityFrame = convert(conceptualSize(range: clause.range)!, to: nil)
|
// element.accessibilityFrame = convert(conceptualSize(range: clause.range)!, to: nil)
|
||||||
element.accessibilityFrameInContainerSpace = rect
|
// element.accessibilityFrameInContainerSpace = rect
|
||||||
element.accessibilityLabel = "Testing"
|
element.accessibilityLabel = "Testing"
|
||||||
element.accessibilityTraits = .button
|
element.accessibilityTraits = .button
|
||||||
element.isAccessibilityElement = true
|
element.isAccessibilityElement = true
|
||||||
@ -607,4 +613,27 @@ extension Label {
|
|||||||
accessibilityElements = elements
|
accessibilityElements = elements
|
||||||
return elements
|
return elements
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
func boundingRect(forCharacterRange range: NSRange) -> CGRect? {
|
||||||
|
|
||||||
|
guard let attributedText = attributedText else { return nil }
|
||||||
|
|
||||||
|
let textStorage = NSTextStorage(attributedString: attributedText)
|
||||||
|
let layoutManager = NSLayoutManager()
|
||||||
|
|
||||||
|
textStorage.addLayoutManager(layoutManager)
|
||||||
|
|
||||||
|
let textContainer = NSTextContainer(size: bounds.size)
|
||||||
|
textContainer.lineFragmentPadding = 0.0
|
||||||
|
|
||||||
|
layoutManager.addTextContainer(textContainer)
|
||||||
|
|
||||||
|
var glyphRange = NSRange()
|
||||||
|
|
||||||
|
// Convert the range for glyphs.
|
||||||
|
layoutManager.characterRange(forGlyphRange: range, actualGlyphRange: &glyphRange)
|
||||||
|
|
||||||
|
return layoutManager.boundingRect(forGlyphRange: glyphRange, in: textContainer)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user