在我的应用中,我需要向UIKit
对象中添加一些属性;我最初的想法是为我需要的每个元素创建一个子类,并在新类中创建属性,但是我意识到这意味着为我正在使用的每种UI元素类型编写一个新类。
在我的特定情况下,我想添加一些不同的视图,例如UIImageView
和UILabel
。类型为initial position
的两个属性,分别为final position
和CGRect
,用于存储初始和最终的正电子,以便在翻译此视图的方法中使用它
有什么方法可以在不创建很多类的情况下完成此任务吗?
答案 0 :(得分:0)
您可以执行以下操作:
WordprocessingMLPackage wordPackage = WordprocessingMLPackage.createPackage(PageSizePaper.A4,true);
ObjectFactory factory=Context.getWmlObjectFactory();Tbl table = factory.createTbl();
Tr tableRow = factory.createTr();
byte[] imageBytes = Base64.getDecoder().decode(t.getBase64Image());
BinaryPartAbstractImage imagePart = BinaryPartAbstractImage.createImagePart(wordPackage, imageBytes);
Inline inline = imagePart.createImageInline("image", "image", 0, 1, false);
P celPar = addInlineImageToParagraph(inline, factory);
Tc tableCell = factory.createTc();
tableCell.getContent().clear();
tableCell.getContent().add(celPar);
tableRow.getContent().add(tableCell);
wordPackage.getMainDocumentPart().addObject(table);
private P addInlineImageToParagraph(Inline inline, ObjectFactory factory) {
P paragraph = factory.createP();
R run = factory.createR();
paragraph.getContent().add(run);
Drawing drawing = factory.createDrawing();
run.getContent().add(drawing);
drawing.getAnchorOrInline().add(inline);
return paragraph;
}
不可能仅在扩展名中声明属性,因此您需要设置protocol Position {
var initialPosition: Int { get set }
}
和get
。您可以只关联一个值:
set
然后您像这样扩展private var initialPositionKey: UInt = 0
extension Position {
var initialPosition: Int {
get {
return objc_getAssociatedObject(self, &initialPositionKey) as! Int
}
set {
objc_setAssociatedObject(self, &initialPositionKey, newValue, .OBJC_ASSOCIATION_RETAIN)
}
}
}
:
UIView
以及以下作品:
extension UIView: Position {}