通过扩展 UIButton 类使用 Swift 创建自定义按钮

Posted

技术标签:

【中文标题】通过扩展 UIButton 类使用 Swift 创建自定义按钮【英文标题】:Create custom button with Swift by extending the UIButton class 【发布时间】:2015-09-14 13:09:24 【问题描述】:

我正在学习 Swift,我有一个基本问题。我不想使用情节提要,我想用代码创建一个按钮。目前,我这样编码我的按钮:

let button1: UIButton = UIButton.buttonWithType(UIButtonType.Custom) as UIButton
button1.setImage(UIImage(named: "myImage.png"), forState: UIControlState.Normal)
button1.addTarget(self, action: "myMethod", forControlEvents: UIControlEvents.TouchUpInside)
button1.frame = CGRectMake(0, 0, 25, 25) // then I add this button to a navigation control

这可行,但我正在寻找稍微不同的东西。即:我想创建一个类,我想至少传递图像名称、按钮必须调用的方法和框架。此外,我想随时在我的 ViewController 中实例化按钮。

我在这里找到了很多帖子,但没有一个帖子真的有用(有些代码不起作用)。

你能帮帮我吗?

【问题讨论】:

【参考方案1】:
enum SPBarButtonTypes 
    case openDrawer
    case loginInfo


class SPBarButtonFactory: NSObject 

    class func createBarButtonItemOfType (buttonType: SPBarButtonTypes, withTarget buttonTarget: AnyObject, andAction buttonAction: Selector) -> UIBarButtonItem 
        var returnButton: UIBarButtonItem = UIBarButtonItem()
        returnButton.target = buttonTarget
        returnButton.action = buttonAction

        switch buttonType 
            case .openDrawer:
                returnButton.image = UIImage(named: "ic_menu")
            case .loginInfo:
                returnButton.image = UIImage(named: "ic_info_outline")
        default: NSLog("Wrong BarButton type")
        

        return returnButton
    


添加以改进评论

它只是像嵌套在另一个类中的类一样“接缝”,但它确实是 Swift 声明类方法的方式......

这一行声明了一个名为 SPBarButtonFactory 的类

class SPBarButtonFactory...

这一行声明了一个 SPBarButtonFactory 的类方法

class func createBarButtonItemOfType...

【讨论】:

这对你有意义吗?还是我应该再描述一下? 没关系,看到一个类嵌套在另一个类中我只是有点惊讶:-) 好的,我是这样安装的,效果很好,谢谢:let btn = SPBarButtonFactory.createBarButtonItemOfType(.openDrawer,withTarget: self,andAction: "none") self.navigationItem.rightBarButtonItem = btn 是的,这是正确的做法...玩得开心,看看我添加的内容...重要的是要知道!!! :-) 是的,但实例方法不是我的答案中描述的......你看到的那个是类方法,而不是实例方法......但是你那里的文档是正确的人可以完全学习它...所以您走在了一条好路上:-)

以上是关于通过扩展 UIButton 类使用 Swift 创建自定义按钮的主要内容,如果未能解决你的问题,请参考以下文章

使用swift更改动画块内的UIbutton

如何在 Swift 中扩展特定 UIButton 的点击区域?

Swift 3:将UIButton扩展添加到ViewController

swift 扩展名称UIButton的颜色

如何从 Swift 的扩展中排除特定的 UIButton?

UIBarButtonItem 的 UIButton 扩展