UIButton 中未调用委托方法 class
Delegate Method is not called in UIButton class
我有一个 UIbutton class - 我想在用户在设置屏幕上进行更改后从中调用 'adjust constraints' 方法。我已经创建了一些协议,一切似乎都井井有条,但它没有在用户关闭设置屏幕后从子视图 UIButton 调用方法。
我在这里尝试了其他一些解决方案 - 没有奏效,我认为这可能是因为我正在使用 UIButton class 并且我无法重新实例化它或调用实例化?无论哪种方式,它都不会从委托中调用方法。
使用协议是否是解决此问题的正确方法?如果是,我错过了什么?
基本上我有3个文件;我设置为第一个委托的 MainVC(当用户完成对设置屏幕的更改时,它会从我的 SettingScreenVC 触发):
class MainVC: UIViewController, SettingScreenDelegate {
weak var numButtonDelegate: Buttons_Numeric?
func settingSetButtonConstraints() {
numButtonDelegate?.setupButtonConstraints()
}
}
然后在我的设置屏幕中,我在用户对其设置进行一些更改后调用MainVC:
class MainVC: SettingScreenVC {
weak var delegate: SettingScreenDelegate?
func closeSettings() {
delegate?.settingSetButtonConstraints()
}
}
然后在我的 Buttons_Numeric class 中声明函数和 UIButton class代表:
protocol numButtonDelegate: class {
func setupButtonConstraints()
}
class Buttons_Numeric: UIButton, numButtonDelegate {
weak var numButtonDelegate: Buttons_Numeric?
required init(coder aDecoder:NSCoder) { super.init(coder: aDecoder)!}
override init(frame:CGRect) {super.init(frame: frame)
self.numButtonDelegate = self
setupButtonConstraints()
}
override func awakeFromNib() {
self.numButtonDelegate = self
setupButtonConstraints()
}
func setupButtonConstraints() {
//SET UP CONSTRAINTS
}
}
您需要为委托变量赋值。如果答案总是 self
,我会这样做
class Example: SomeDelegate {
lazy var someDelegate: SomeDelegate? = self
}
否则,您需要在 class' 初始化程序或 ViewDidLoad 中执行此操作。
好的,关于委托,您需要了解以下几点:
- 如果创建委托,则需要在某处符合委托。
- 符合要求的 class 应该分配给委托的实例。
考虑到这一点,让我们尝试修复代码:
首先是设置屏幕:
protocol SettingScreenDelegate: class {
func settingSetButtonConstraints()
}
class SettingScreenVC {
weak var delegate: SettingScreenDelegate?
func closeSettings() {
delegate?.settingSetButtonConstraints()
}
}
到目前为止一切顺利,现在 mainScreen 应该符合 SettingScreenDelegate 并分配给它的委托:
class MainVC: UIViewController, SettingScreenDelegate {
weak var button: Buttons_Numeric!
func openSettingsScreen() {
let settingsScreen = ... // the setting screen instanciation
settingsScreen.delegate = self // the MainVC
}
func settingSetButtonConstraints() {
self.button.setupButtonConstraints()
}
}
现在是最后一步,MainVC 应该有一个按钮的实例,然后我们唯一需要做的就是从 MainVC 调用函数 'setupButtonConstraints',这意味着我们不需要委托按钮。
class Buttons_Numeric: UIButton {
required init(coder aDecoder:NSCoder) { super.init(coder: aDecoder)!}
override init(frame:CGRect) {super.init(frame: frame)
setupButtonConstraints()
}
override func awakeFromNib() {
setupButtonConstraints()
}
func setupButtonConstraints() {
//SET UP CONSTRAINTS
}
}
我有一个 UIbutton class - 我想在用户在设置屏幕上进行更改后从中调用 'adjust constraints' 方法。我已经创建了一些协议,一切似乎都井井有条,但它没有在用户关闭设置屏幕后从子视图 UIButton 调用方法。
我在这里尝试了其他一些解决方案 - 没有奏效,我认为这可能是因为我正在使用 UIButton class 并且我无法重新实例化它或调用实例化?无论哪种方式,它都不会从委托中调用方法。
使用协议是否是解决此问题的正确方法?如果是,我错过了什么?
基本上我有3个文件;我设置为第一个委托的 MainVC(当用户完成对设置屏幕的更改时,它会从我的 SettingScreenVC 触发):
class MainVC: UIViewController, SettingScreenDelegate {
weak var numButtonDelegate: Buttons_Numeric?
func settingSetButtonConstraints() {
numButtonDelegate?.setupButtonConstraints()
}
}
然后在我的设置屏幕中,我在用户对其设置进行一些更改后调用MainVC:
class MainVC: SettingScreenVC {
weak var delegate: SettingScreenDelegate?
func closeSettings() {
delegate?.settingSetButtonConstraints()
}
}
然后在我的 Buttons_Numeric class 中声明函数和 UIButton class代表:
protocol numButtonDelegate: class {
func setupButtonConstraints()
}
class Buttons_Numeric: UIButton, numButtonDelegate {
weak var numButtonDelegate: Buttons_Numeric?
required init(coder aDecoder:NSCoder) { super.init(coder: aDecoder)!}
override init(frame:CGRect) {super.init(frame: frame)
self.numButtonDelegate = self
setupButtonConstraints()
}
override func awakeFromNib() {
self.numButtonDelegate = self
setupButtonConstraints()
}
func setupButtonConstraints() {
//SET UP CONSTRAINTS
}
}
您需要为委托变量赋值。如果答案总是 self
class Example: SomeDelegate {
lazy var someDelegate: SomeDelegate? = self
}
否则,您需要在 class' 初始化程序或 ViewDidLoad 中执行此操作。
好的,关于委托,您需要了解以下几点:
- 如果创建委托,则需要在某处符合委托。
- 符合要求的 class 应该分配给委托的实例。
考虑到这一点,让我们尝试修复代码:
首先是设置屏幕:
protocol SettingScreenDelegate: class {
func settingSetButtonConstraints()
}
class SettingScreenVC {
weak var delegate: SettingScreenDelegate?
func closeSettings() {
delegate?.settingSetButtonConstraints()
}
}
到目前为止一切顺利,现在 mainScreen 应该符合 SettingScreenDelegate 并分配给它的委托:
class MainVC: UIViewController, SettingScreenDelegate {
weak var button: Buttons_Numeric!
func openSettingsScreen() {
let settingsScreen = ... // the setting screen instanciation
settingsScreen.delegate = self // the MainVC
}
func settingSetButtonConstraints() {
self.button.setupButtonConstraints()
}
}
现在是最后一步,MainVC 应该有一个按钮的实例,然后我们唯一需要做的就是从 MainVC 调用函数 'setupButtonConstraints',这意味着我们不需要委托按钮。
class Buttons_Numeric: UIButton {
required init(coder aDecoder:NSCoder) { super.init(coder: aDecoder)!}
override init(frame:CGRect) {super.init(frame: frame)
setupButtonConstraints()
}
override func awakeFromNib() {
setupButtonConstraints()
}
func setupButtonConstraints() {
//SET UP CONSTRAINTS
}
}