- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想制作一个自定义按钮并在自定义按钮类内的选择器内提供输入,但它给我一个错误消息。我该如何修复它
我在 Playground 上测试它,因为当我运行到模拟器时应用程序崩溃了。这是 Playground 上出现的错误
terminating with uncaught exception of type NSException
这是我在 Playground 上的代码
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")
}
}
新问题是
Cannot convert a value type of (viewController) -> () expected argument type 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
Cannot convert value of type '(ProfileController) -> () -> (ProfileController)' to expected argument type '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
最佳答案
您应该删除选择器作为初始化参数。您应该在创建按钮的任何位置设置目标。您还需要为 handleButton
添加 @objc,以供 Selector
调用。您的设置将如下所示,
class customButton: UIButton {
let titleName: String
init(titleName: String) {
self.titleName = titleName
super.init(frame: .zero)
self.setTitle(titleName, for: .normal)
}
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")
testButton.translatesAutoresizingMaskIntoConstraints = false
testButton.addTarget(self, action: Selector("handleButton"), for: .touchUpInside)
view.addSubview(testButton)
testButton.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
testButton.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
}
@objc func handleButton() {
print("Pressed")
}
}
在最新的 Swift
中,您应该将 Selector("handleButton")
更改为 #selector(handleButton)
如果你想坚持当前的实现,那么你需要在 customButton
初始化器中使用 target
参数,如下所示,
init(titleName: String, selectorName: String, target: UIViewController) {
self.titleName = titleName
self.selectorName = selectorName
super.init(frame: .zero)
self.setTitle(titleName, for: .normal)
self.addTarget(target, action: Selector(selectorName), for: .touchUpInside)
}
现在您将像这样传递 ViewController
引用,
let testButton = customButton(titleName: "Test", selectorName: "handleButton", target: self)
并且不要忘记使用 objc
将 handleButton
标记为,
@objc func handleButton() {
关于ios - 在制作自定义 UIButton 时以 NSException 类型的未捕获异常终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53927914/
@throw NSException 和 NSException raise 有什么区别?我想知道我应该使用哪一个(有一个合适的用例来使用一个),为什么? 最佳答案 来自 Apple 文档, An i
我有一个基本的登录页面,它采用两个值(用户名和密码),这些详细信息被传递到我的服务器,我在服务器上使用 PHP 解析结果并返回 JSON 数组。 一切正常;我可以正确登录,错误登录时会出现正确的错误警
我在编译代码时收到以下错误。我正在尝试连接到 sqlite 3 数据库,并在将文本输入 UIAlertView 后将其保存到表中,创建一个新列表。非常感谢所有帮助我花了几个小时试图弄清楚为什么会抛出这
我是 swift 编程的新手。所以我试图将滑动手势添加到我的 iOS 应用程序中。但是当我尝试滑动时,它会停止应用程序并说 NSException 被捕获。这是我写的代码。 override func
我开始自学 Swift,我是一个真正的初学者,我正在开发一个计算器应用程序,就像一个入门项目。我一直收到线程错误,它以 NSException 类型的未捕获异常终止。我在几个地方读到这通常是由于 St
我已经通过了 Introduction to Exception Programming Topics for Cocoa .在 Throwing Exceptions 下, 显示了一个异常名称:Fi
我是 Swift 的新手,我正在使用 ObjectMapper 解析我的 JSON,但我希望数据显示在 TableView 中。但是我有一个问题: libc++abi.dylib: terminati
我正在使用mailcore2这都是基于 block 的。通常他们定义这样的操作 SomeMailCoreOp *op = [session getOp]; [op start:^(NSError* e
请帮我解决这个问题我是一个学习者 [Session started at 2011-01-10 14:32:07 +0530.] 2011-01-10 14:32:10.595 balls[963:2
抱歉,恐怕这个问题相当含糊,但我不知道使用正确的术语。也许有人可以编辑它? 我正在尝试弄清楚这个问题是什么 2012-12-23 09:53:36.827 myApp[10768:303] *** -
问题 我正在编写一个 Cocoa 应用程序,我想引发异常,从而使应用程序崩溃。 我的应用程序委托(delegate)中有以下几行: [NSException raise:NSInternalIncon
Swift 应用程序崩溃并给我这个错误。 *** Terminating app due to uncaught exception 'NSInternalInconsistencyException
这个问题在这里已经有了答案: Is it a good practice to subclass from NSException for app-specific exceptions? (1 个回
我在 Swift 应用中使用 Firebase 和 GeoFire 3.0 Cocoapod,用世界各地的标记填充 map 。以下是执行圆形查询以获取 map 上当前显示区域内的标记的代码:
我目前是 Xcode 和 IOS 的新手,我在 Xcode 中打开了一个完成的项目,但是当我尝试运行该项目时,我遇到了这些错误: 2015-12-18 20:05:49.729 Arsene[
我尝试运行我的应用程序,但抛出了异常,在控制台中我得到了这个: 2011-05-05 00:18:50.984 myApp[2906:207] *** Terminating app due to u
我正在使用 Flurry Analytics,它会报告我的应用程序崩溃,效果很好,只是我不知道是哪种方法导致了崩溃。 我正在捕获未捕获的异常,如下所示: { [FlurryAnalytics
我正在调用另一个类的方法,但我不能,并且收到此错误。我搜索了它,但没有找到任何可以解决这个问题的东西。请帮忙。 代码: adres = [adres stringByAppendingString:[
我使用以下方法实现了以下异常处理程序: NSSetUncaughtExceptionHandler(&ExceptionHandler) 处理程序然后使用以下代码调用handleException:
我正在尝试为 iPhone 构建这个小项目,但是当我将其部署到 iOS 模拟器上时,我收到错误“libc++abi.dylib:因未捕获的 NSException 类型异常而终止”。 代码非常简单,如
我是一名优秀的程序员,十分优秀!