我尝试了各种解决方案,但都不太奏效。我在我的FormViewController中创建了一个headerView(我使用的是Eureka ),我将我的视图分成了一个单独的HeaderViews: NSObject
,以遵守MVC原则。
我试图添加一个buttonTarget,但它抛出错误unrecognized selector sent to class
。代码如下:
class ProfileSettingsViewController: FormViewController {
override func viewDidLoad() {
super.viewDidLoad()
form +++
Section(){ section in
section.header = {
var header = HeaderFooterView<UIView>(.callback({
let view = HeaderViews.setUpHeaderForProfileView(user: self.user)
return view
}))
header.height = { 200 }
return header
}()
}
}
在我的HeaderViews中:
class HeaderViews: NSObject {
static func setUpHeaderForProfileView(user: User) -> UIView {
let view = UIView(frame: CGRect(x: 0, y: 0, width: screen.width, height: 100))
let changeAvatarButton = UIButton(frame: CGRect(x: (screen.width / 2) - 50, y: avatarImageView.frame.maxY + 10, width: 100, height: 20))
changeAvatarButton.addTarget(self, action: #selector(getAvatar(_:)), for: .touchUpInside)
view.addSubview(changeAvatarButton)
return view
}
func getAvatar(_ sender: UIButton!) {
print("Change Avatar tapped")
}
}
我不太确定我是否犯了任何错误,因为我在这篇文章中尝试了各种选择器的方法:Unrecognized selector sent to class
我怀疑它可能与子类NSObject有关。接下来我可以尝试什么?
2条答案
按热度按时间r9f1avp51#
更新如果无法获取
HeaderViews
示例。然后将getAvatar
改为静态函数。Origin在静态函数中不应该使用
self
作为目标。因为这个self
意味着HeaderViews
。传递示例作为目标函数。例如:
4sup72z82#
如果不使用UIButton参数,则定义不带参数的func getAvatar()或func getAvatar(_ sender:AnyObject?)
函数调用将更改为。changeAvatarButton.addTarget(self,action:#selector(getAvatar),用于:.touchUpInside)
另外我很好奇为什么不把HeaderViews定义为UIView的子类?
这可能就是问题所在。