通过扩展 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 的点击区域?