外观().setBackoundImage在自定义类上不起作用

appearance().setBackgroundImage Not Working On Custom Class(外观().setBackoundImage在自定义类上不起作用)
本文介绍了外观().setBackoundImage在自定义类上不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已创建了一个UIBarButtonItem自定义类,并在情节提要中使用此类分配了一个栏按钮项。

在应用程序委派中,我尝试使用以下命令设置其外观:

VIPButton.appearance().setBackgroundImage(UIImage(named: "vipButton"), for: .normal, barMetrics: .default)

但是,虽然这适用于常规UIBarButtonItems,但它对我的自定义类栏按钮项没有影响。

如有任何帮助,我们将不胜感激。

推荐答案

从UIButton创建自定义类:

public class SimpleButton: UIButton {

    @objc dynamic var backColor: UIColor? {
        didSet {
            self.backgroundColor = self.backColor
        }
    }
    
    @objc dynamic var image: UIImage? {
        didSet {
            self.setImage(self.image, for: .normal)
        }
    }
}
接下来,从UIBarButtomItem创建一个类。 现在将CustomView属性设置为SimpleButon以获得自定义外观,并如下所示设置操作:

public class SimpleBarButton: UIBarButtonItem {
    
    // create object from simpleButton
    private let button = SimpleButton()
    
    public required init?(coder: NSCoder) {
        super.init(coder: coder)
                
        // add target for button
        self.button.addTarget(self, action: #selector(self.buttonTapped(_:)), for: .touchUpInside)
        
        // set title
        self.button.setTitle("title", for: .normal)
        self.button.sizeToFit()
        
        // assing simple button to customView property
        self.customView = self.button
    }
    
    // get callback from touchUp button
    @objc func buttonTapped(_ sender: UIButton) {
        
        // here set callback for tapped on BarButtonItem
        // check target and action is not Nil
        guard let target = self.target, let action = self.action else {
            return
        }
        
        // call selector (implement to your ViewController)
        // pass self for parameters
        target.performSelector(inBackground: action, with: self)
    }
}

我在本节中创建了一个类,并将一个按钮分配给了CustomView变量。

现在我向SimpleButton添加样式,如下所示:

SimpleButton.appearance().backColor = .red
SimpleButton.appearance().image = UIImage.init(named: "images")!

现在用于在情节提要上创建BarButtonItem并将自定义类更改为SimpleBarButton:

现在创建视图控制器并为事件barButton添加操作:

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    @IBAction func sampleClicked(_ sender: SimpleBarButton) {
        print("callBack from action on BarButton Item")
    }
}

并将此函数分配给BarButton:

用户界面输出:

这篇关于外观().setBackoundImage在自定义类上不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Why local notification is not firing for UNCalendarNotificationTrigger(为什么没有为UNCalendarNotificationTrigger触发本地通知)
Pushing UIViewController above UITabBar(将UIView控制器推送到UITabBar上方)
Dropbox Files.download does not start when number of files in folder is gt; 1000(当文件夹中的文件数为1000时,Dropbox Files.Download不会启动)
Android + coreLibraryDesugaring: which Java 11 APIs can I expect to work?(Android+core LibraryDesugering:我可以期待哪些Java 11API能够工作?)
Get an event when UIBarButtonItem menu is displayed(显示UIBarButtonItem菜单时获取事件)
iOS: Send multiple actions to a bar button(IOS:向一个栏按钮发送多个动作)