gpt4 book ai didi

ios - 如何在 UITextField 扩展中创建一个新字段?

转载 作者:行者123 更新时间:2023-11-28 12:34:20 25 4
gpt4 key购买 nike

我是 Swift 的新手,也许这是一个愚蠢的问题,但我找不到答案。

我创建了一个扩展:

extension UITextField {

var placeholderLabel: UILabel {

get {
return self.placeholderLabel
}

set {
self.placeholderLabel = newValue
}

}

}

设置属性后,应用程序崩溃。

最佳答案

您不能在扩展中拥有存储属性。

不允许扩展向现有类添加属性,因为添加类的属性结构会发生变化。而且因为 Objective C、Swift 或任何其他已知的编程语言负担不起它,所以它不允许您将存储的属性添加到扩展中。

那么没有任何解决办法吗??

这是将标签保存为扩展中的存储属性的方法:)

import Foundation
import UIKit


fileprivate var ascociatedObjectPointer : UInt8 = 99

extension UITextField {
var myLabel : UILabel {
get {
return objc_getAssociatedObject(self, &ascociatedObjectPointer) as! UILabel
}
set {
objc_setAssociatedObject(self, &ascociatedObjectPointer, myLabel, .OBJC_ASSOCIATION_RETAIN)
}
}
}

它是如何工作的??

很简单,为你伪装成或伪装成存储属性的变量编写setter和getter,并在内部持有一个与现有类无关的指针,因此它不会影响现有类的结构。

希望对您有所帮助。

关于ios - 如何在 UITextField 扩展中创建一个新字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41299363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com