【发布时间】:2018-12-26 05:46:21
【问题描述】:
我想制作一个自定义按钮并在自定义按钮类内的选择器内提供输入,但它给了我一个错误消息。我该如何解决它
我在操场上测试它,因为当我运行模拟器时,应用程序崩溃了。这是操场上出现的错误
以 NSException 类型的未捕获异常终止
这是我在操场上的代码
class customButton: UIButton {
let titleName: String
let selectorName: String
init(titleName: String, selectorName: String) {
self.titleName = titleName
self.selectorName = selectorName
super.init(frame: .zero)
self.setTitle(titleName, for: .normal)
self.addTarget(self, action: Selector(selectorName), for: .touchUpInside)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
class viewController: UIViewController {
override func loadView() {
super.loadView()
let testButton = customButton(titleName: "Test", selectorName: "handleButton")
testButton.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(testButton)
testButton.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
testButton.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
}
func handleButton() {
print("Pressed")
}
}
新问题是
无法转换 (viewController) -> () 预期参数类型 UIViewController 的值类型
I make a custom UIButton with target selector as an input, when I try to add input in the custom button it show in Xcode
无法将类型 '(ProfileController) -> () -> (ProfileController)' 的值转换为预期的参数类型 'UIViewController
这是我在 ProfileController 和自定义按钮中的代码
class CustomButton: UIButton {
let imageName: UIImage
let selectorName: String
let target: UIViewController
init(imageName: UIImage, selectorName: String, target: UIViewController) {
self.imageName = imageName
self.selectorName = selectorName
self.target = target
super.init(frame: .zero)
self.setImage(imageName.withRenderingMode(.alwaysOriginal), for: .normal)
self.addTarget(target, action: Selector(selectorName), for: .touchUpInside)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
class ProfileController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
let profileID = "profileID"
let profileImageView: UIImageView = {
let iv = UIImageView()
iv.image = #imageLiteral(resourceName: "581010.jpg-r_1280_720-f_jpg-q_x-xxyxx").withRenderingMode(.alwaysOriginal)
iv.contentMode = .scaleAspectFill
iv.clipsToBounds = true
return iv
}()
let pickerImage = CustomButton(imageName: #imageLiteral(resourceName: "user-6"), selectorName: "handleImagePicker", target: self) //this is the error message show up in the target: self
【问题讨论】:
-
你正在使用 self 所以你应该使用惰性声明作为
lazy var pickerImage: CustomButton = { return CustomButton(imageName: #imageLiteral(resourceName: "user-6"), selectorName: "handleImagePicker", target: self) }() -
@Kamran maaaann 你是神我要崇拜你哈哈哈,再次感谢你,它有效。
标签: ios swift exception uibutton