我的应用程序在我点击任何按钮时崩溃了

3
如何在实用类中使用选择器及其定义?我的代码出现了一些错误。请告诉我如何解决这个错误?
错误:当我点击任何按钮时,我的应用程序崩溃了。
class BarButton{
    static func items(navigationItem: UINavigationItem) {
        //Hide Back Button
        navigationItem.hidesBackButton = true

        //Add Label to Left of NavigationBar
        let leftLabel = UIBarButtonItem(title: "", style: .plain, target: self, action: nil)
        leftLabel.tintColor = UIColor.init(red: 30/255, green: 104/255, blue: 140/255, alpha: 1)
        navigationItem.setLeftBarButton(leftLabel, animated: false)

        //List Button
        let btnList = UIButton(frame: CGRect(x: 0, y: 0, width: 35, height: 22))
        btnList.setImage(UIImage(named:"list-icn"), for: .normal)
        btnList.addTarget(self, action: #selector(listBtn), for: .touchUpInside)
        let rightBarBtn1 = UIBarButtonItem.init(customView: btnList)
        rightBarBtn1.tintColor = UIColor(red: 30/255, green: 104/255, blue: 140/255, alpha: 1)

        //Notification Button
        let btnList2 = UIButton(frame: CGRect(x: 0, y: 0, width: 22, height: 22))
        btnList2.setImage(UIImage(named:"notification-icn"), for: .normal)
        btnList2.addTarget(self, action: #selector(notificationBtn), for: .touchUpInside)
        let rightBarBtn2 = UIBarButtonItem.init(customView: btnList2)
        rightBarBtn2.tintColor = UIColor(red: 30/255, green: 104/255, blue: 140/255, alpha: 1)
        navigationItem.setRightBarButtonItems([rightBarBtn1, rightBarBtn2], animated: true)
    }

    @objc func listBtn() {
        print("List Btn")
    }

    @objc func notificationBtn() {
        print("Notification Btn")
    }
}

请尝试在日志中查看崩溃消息以获取有关崩溃的详细信息。 - Awais Fayyaz
2个回答

1

Try this and see:

let btnList = UIButton(frame: CGRect(x: 0, y: 0, width: 35, height: 22))
btnList.setImage(UIImage(named:"list-icn"), for: .normal)

// Update selector
btnList.addTarget(self, action: #selector(BarButton.listBtn(sender:)), for: .touchUpInside)
let rightBarBtn1 = UIBarButtonItem.init(customView: btnList)
rightBarBtn1.tintColor = UIColor(red: 30/255, green: 104/255, blue: 140/255, alpha: 1)


//Notification Button
let btnList2 = UIButton(frame: CGRect(x: 0, y: 0, width: 22, height: 22))
btnList2.setImage(UIImage(named:"notification-icn"), for: .normal)

// Update selector
btnList2.addTarget(self, action: #selector(BarButton.notificationBtn(sender:)), for: .touchUpInside)
let rightBarBtn2 = UIBarButtonItem.init(customView: btnList2)
rightBarBtn2.tintColor = UIColor(red: 30/255, green: 104/255, blue: 140/255, alpha: 1)
navigationItem.setRightBarButtonItems([rightBarBtn1, rightBarBtn2], animated: true)


// Try using static
@objc static func listBtn(sender: Any)
{
    print("List Btn")
}

// Try using static
@objc static func notificationBtn(sender: Any)
{
    print("Notification Btn")
}

我想在Utility类中实现这个功能,并在所有视图控制器中使用该类,以在导航栏中显示这些按钮。 - Ayush Agrawal
NSForwarding: 警告:类为 'DEAdmin.BarButton' 的对象 0x1003e7640 未实现方法 methodSignatureForSelector: -- 问题在前方 Unrecognized selector +[DEAdmin.BarButton listBtnWithSender:] 2018-04-05 16:57:38.503235+0530 DEAdmin[4381:2316382] Unrecognized selector +[DEAdmin.BarButton listBtnWithSender:] - Ayush Agrawal

1
你的 listBtnnotificationBtn 方法是实例方法,但你试图在类上调用它们,而不是类实例 - 你的 items 方法是 static 的,所以其中的 selfAnyObject.Type 类型。
为了解决这个问题,将 listBtnnotificationBtn 方法改为静态方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接