Music_Player3/Pods/JXSegmentedView/Sources/AttributeTitle/JXSegmentedTitleAttributeDataSource.swift
2024-05-14 15:04:59 +08:00

77 lines
3.7 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// JXSegmentedTitleAttributeDataSource.swift
// JXSegmentedView
//
// Created by jiaxin on 2019/1/2.
// Copyright © 2019 jiaxin. All rights reserved.
//
import UIKit
open class JXSegmentedTitleAttributeDataSource: JXSegmentedBaseDataSource {
/// title
open var attributedTitles = [NSAttributedString]()
/// 使countattributedTitles
open var selectedAttributedTitles: [NSAttributedString]?
/// JXSegmentedViewUITableViewcellJXSegmentedViewreloadDatatitleUITableViewcellModeltitlesJXSegmentedView
open var widthForTitleClosure: ((NSAttributedString)->(CGFloat))?
/// titlenumberOfLines
open var titleNumberOfLines: Int = 2
open override func preferredItemModelInstance() -> JXSegmentedBaseItemModel {
return JXSegmentedTitleAttributeItemModel()
}
open override func preferredItemCount() -> Int {
return attributedTitles.count
}
open override func preferredRefreshItemModel(_ itemModel: JXSegmentedBaseItemModel, at index: Int, selectedIndex: Int) {
super.preferredRefreshItemModel(itemModel, at: index, selectedIndex: selectedIndex)
guard let myItemModel = itemModel as? JXSegmentedTitleAttributeItemModel else {
return
}
myItemModel.attributedTitle = attributedTitles[index]
myItemModel.selectedAttributedTitle = selectedAttributedTitles?[index]
myItemModel.textWidth = widthForTitle(myItemModel.attributedTitle, selectedTitle: myItemModel.selectedAttributedTitle)
myItemModel.titleNumberOfLines = titleNumberOfLines
}
open func widthForTitle(_ title: NSAttributedString?, selectedTitle: NSAttributedString?) -> CGFloat {
let attriText = selectedTitle != nil ? selectedTitle : title
guard let text = attriText else {
return 0
}
if widthForTitleClosure != nil {
return widthForTitleClosure!(text)
}else {
let textWidth = text.boundingRect(with: CGSize(width: CGFloat.infinity, height: CGFloat.infinity), options: NSStringDrawingOptions.init(rawValue: NSStringDrawingOptions.usesLineFragmentOrigin.rawValue | NSStringDrawingOptions.usesFontLeading.rawValue), context: nil).size.width
return CGFloat(ceilf(Float(textWidth)))
}
}
/// `preferredRefreshItemModel( _ itemModel: JXSegmentedBaseItemModel, at index: Int, selectedIndex: Int)`使
open override func preferredSegmentedView(_ segmentedView: JXSegmentedView, widthForItemAt index: Int) -> CGFloat {
var width: CGFloat = 0
if itemWidth == JXSegmentedViewAutomaticDimension {
let myItemModel = dataSource[index] as! JXSegmentedTitleAttributeItemModel
width = myItemModel.textWidth + itemWidthIncrement
}else {
width = itemWidth + itemWidthIncrement
}
return width
}
//MARK: - JXSegmentedViewDataSource
open override func registerCellClass(in segmentedView: JXSegmentedView) {
segmentedView.collectionView.register(JXSegmentedTitleAttributeCell.self, forCellWithReuseIdentifier: "cell")
}
open override func segmentedView(_ segmentedView: JXSegmentedView, cellForItemAt index: Int) -> JXSegmentedBaseCell {
let cell = segmentedView.dequeueReusableCell(withReuseIdentifier: "cell", at: index)
return cell
}
}