【发布时间】:2021-07-23 07:39:12
【问题描述】:
我有一个 UIbutton 类 - 在用户在设置屏幕上进行更改后,我想从中调用“调整约束”方法。我已经创建了一些协议,一切看起来都井井有条,但是在用户关闭设置屏幕后,它没有从子视图 UIButton 调用该方法。
我在这里尝试了一些其他解决方案 - 没有奏效,我认为这可能是因为我正在使用 UIButton 类并且我无法重新实例化它,或者调用实例化?无论哪种方式,它都不会从委托中调用方法。
使用协议是解决这个问题的正确方法吗?如果是,我错过了什么?
基本上我有 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 类中声明函数和 UIButton 类委托:
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
}
}
【问题讨论】:
-
MainVc 中的
closeSettings()是否被调用? ,SettingScreenVC是如何推送/呈现/tabbar的? -
@GokulG 当 Segue 被解散时
-
你在哪里设置
MainVC中的代理? -
@Vadian 我只在MainVC中调用delegate我没有在那里设置,我在Button类中设置delegate为self.numButtonDelegate = self,这不正确吗?
-
您必须将
delegate: SettingScreenDelegate?设置为采用该协议的实例。否则delegate仍然是nil并且什么都不会发生。
标签: swift uibutton swift-protocols