【发布时间】:2018-01-13 02:40:16
【问题描述】:
我正在尝试将多个按钮添加到 UIView 子类。在UIView 子类(称为leftPanel)的init() 方法中,我添加了对不同函数的多个调用以添加每个按钮。这就是我的init() 的样子:
override init(frame: CGRect){
super.init(frame: frame)
components = self.setupView()
print("Checkpoint: [leftPanel] init() call finished") // basic debug checkpoint
}
init() 调用名为setupView() 的函数,其中包含对创建按钮的每个函数的调用。这是我的setupView() 代码:
func setupView() -> [UIView] {
let addButton = self.setupAddButton()
let infoButton = self.setupInfoButton()
let orderPromoteButton = self.setupOrderPromoteButton()
let orderDemoteButton = self.setupOrderDemoteButton()
let refreshItemsButton = self.setupRefreshItemsButton()
let components = [lessonActionsLabel, addButton, infoButton, orderPromoteButton, orderDemoteButton, refreshItemsButton]
return components
}
setupView 函数中的每个调用都指向一个较小的函数,该函数包含将每个按钮添加到 leftPanel 子类的代码。我已经这样做了,所以我可以根据需要删除每个成员,并且可以使用每个单独的设置功能根据需要将每个单独的项目重新添加到我的视图中。大部分功能都差不多,使用这段代码:
func setupRefreshItemsButton() -> UIButton {
let refreshItemsButton = UIButton(type: UIButtonType.infoLight)
refreshItemsButton.frame = CGRect(x:0, y:screenHeight*55/100, width: screenWidth*30/100, height: screenHeight*5/100)
refreshItemsButton.setTitle(" Refresh lesson items", for: UIControlState.normal)
refreshItemsButton.setImage(UIImage(contentsOfFile: "up.png"), for: UIControlState.normal)
self.addSubview(refreshItemsButton)
return refreshItemsButton
}
设置每个按钮。但是,当我在 iOS 模拟器上运行它时,应该为每个按钮设置图像的行似乎不起作用。当我初始化每个按钮时,我用UIButtonType.infoLight 类型初始化它们,因为我想使用与普通infoLight 按钮相同的样式(例如文本颜色)。我想更改的infoLight 类型的唯一属性是它旁边的图像(默认情况下是(i))。我想将图标变成UIImage(contentsOfFile: "up.png"),但它似乎不起作用。 请任何人提出我可以做出的任何改变来实现这一目标?
我目前正在尝试对现有的内容进行一些更改,例如将类型更改为.custom,看看是否会更改图像,但这也不起作用。它只会重置我想使用的.infoLight 的格式,所以我把它切换回来了。但是,如果您的解决方案需要我将其改回 .custom,那么我可以做到。
我也尝试更改我的代码以仅将 up.png 替换为 up,但它仍然不起作用。
我的代码都没有引发任何警告或错误。
编辑:大多数答案都建议我将我的UIImage(contentsOfFile: "") 更改为UIImage(named: ""),我已经这样做了,但它占用了 UIButton 的整个框架,我想更改它,并保持与.infoLight 相同,方法是在右侧保留一个带有标签的小图像。任何人都可以提出解决方法吗?
关于这个问题的独特之处是什么?:虽然 .setImage() 已通过使用 UIImage(named:) 而不是 UIImage(contentsOfFile:) 来解决,但我也想喜欢在按钮对象中保留.setTitle() 标签。 UIImage(named:) 调用使图像填充按钮的整个 框架,但我想保持它与.infoLight 相同,带有右侧标题的小图像。
【问题讨论】:
-
错误一:UIImage(contentsOfFile: "up.png" 错误二:如果要给按钮设置图片,为什么还要设置标题?错误三: UIButton(type: UIButtonType.infoLight)
-
感谢您的评论。我设置了标题和图像,因为我想让我的按钮很像默认的
.infoLight类,它既有标题又有图像,这是我想要的。本质上,我试图获得一个.infoLight按钮,其中 (i) 更改为自定义图像。 -
添加编辑以指出与其他问题@ItsMeMihir 的可能差异
标签: ios swift swift3 uibutton uiimage