【问题标题】:Create custom button with Swift by extending the UIButton class通过扩展 UIButton 类使用 Swift 创建自定义按钮
【发布时间】: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 中实例化按钮。

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

你能帮帮我吗?

【问题讨论】:

    标签: ios swift class uibutton extend


    【解决方案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
    • 是的,这是正确的做法...玩得开心,看看我添加的内容...重要的是要知道!!! :-)
    • 是的,但实例方法不是我的答案中描述的......你看到的那个是类方法,而不是实例方法......但是你那里的文档是正确的人可以完全学习它...所以您走在了一条好路上:-)
    猜你喜欢
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 1970-01-01
    相关资源
    最近更新 更多