UIImageView 上的按钮不可点击
Posted
技术标签:
【中文标题】UIImageView 上的按钮不可点击【英文标题】:The button on UIImageView is not clickable 【发布时间】:2016-02-04 04:42:41 【问题描述】:我以编程方式创建UIImageView
,并在其上添加一个UIButton
。但按钮不可点击。
当我点击按钮My account
时,它会像第二张照片一样显示。 UIImageView
将出现,并且上面有一个按钮 My profile
。但是My profile
在我单击时不起作用。当我再次单击My account
时,UIImageView
会按我的预期消失(MY profile
也会消失)
将action: "clickProfile"
修改为action: "clickProfile:"
,还是不行。当我点击按钮myAccount
时,UIImageView
将出现,当我点击UIImageView
上的按钮时,它应该打印“工作”。当我单击myAccount
时,UIImageView 将消失。
这是我所有的代码:
class userViewController: UIViewController,UIPopoverPresentationControllerDelegate
let picker = UIImageView(image: UIImage(named: "picker"))
func createPicker()
picker.frame = CGRect(x: ((self.view.frame.width / 2) - 143), y: 200, width: 286, height: 291)
picker.alpha = 0
picker.hidden = true
picker.userInteractionEnabled = true
self.view.addSubview(picker)
func clickProfile(sender:UIButton!)
print("should work")
override func viewDidLoad()
super.viewDidLoad()
self.picker.userInteractionEnabled = true
createPicker()
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
@IBAction func myAccount(sender: UIButton)
picker.hidden ? openPicker() : closePicker()
func openPicker()
self.picker.hidden = false
UIView.animateWithDuration(0.3,
animations:
self.picker.frame = CGRect(x: ((self.view.frame.width / 2) - 143), y: 230, width: 286, height: 291)
self.picker.alpha = 1
)
var offset = -180
let buttonProfile:UIButton = UIButton(type: UIButtonType.Custom) as UIButton
buttonProfile.frame = CGRect(x: 140, y: offset, width: 260, height: 43)
buttonProfile.setTitleColor(UIColor(red: 0.85, green: 0.22, blue: 0.71, alpha: 1.0), forState: .Normal)
// button.setTitleColor(UIColor(rgba: feeling["color"]!), forState: .Normal)
buttonProfile.setTitle("My profile", forState: .Normal)
buttonProfile.tag = 0
buttonProfile.addTarget(self, action: "clickProfile:", forControlEvents: UIControlEvents.TouchUpInside)
picker.addSubview(buttonProfile)
func closePicker()
UIView.animateWithDuration(0.3,
animations:
self.picker.frame = CGRect(x: ((self.view.frame.width / 2) - 143), y: 200, width: 286, height: 291)
self.picker.alpha = 0
,
completion: finished in
self.picker.hidden = true
)
我已经启用 userInteractionEnabled
为真,但 UIImageView 上的按钮仍然不起作用。它是怎么发生的?
【问题讨论】:
你的 UIbutton 和 UIImageview 框架是什么?确保它是相同的,我认为 Button 没有得到 UiImageview 的确切框架...请检查一次... 我认为您缺少:
尝试将action: "clickProfile"
替换为action: "clickProfile:"
action: "clickProfile:" 对我也不起作用。
【参考方案1】:
尝试记录您的选择器和按钮框架。
从您的代码中,这些控件的框架略微偏离,您的按钮框架应该位于选取器内。
picker.frame = CGRect(x: ((self.view.frame.width / 2) - 143), y: 200, width: 286, height: 291)
buttonProfile.frame = CGRect(x: 140, y: -180, width: 260, height: 43)
假设您在 iPhone 5 sim/设备上运行,分辨率为 320 x 568。
假设您的self.view
框架与此相同。
因此,self.view
中的选择器框架为 (17, 200, 286, 290),选择器坐标中的按钮框架为 (140, -180, 260, 43),当转换为 self.view
时,坐标变为 (157 , 20, 260, 43)。
这些坐标的视觉表示如下。
如您所见,您的按钮(绿色图片)不在应有的位置,请尝试修改按钮框架,使按钮位于您的选择器内(红色图片)。
【讨论】:
你能告诉我如何为这些坐标制作视觉表示吗?如何记录框架?我什至不知道如何在网上搜索。我试图将 UIImageView 移动到右上角,以便按钮可以位于 UIImageView 内,但我不知道 UIImageView 的 x,y 值应该是什么。 (不移动按钮,而是移动 UIImageView) 您可以使用此print("%@", NSStringFromCGRect(picker.frame)
记录帧。至于视觉表示,我正在使用游乐场并使用这些框架创建控件。
你能告诉我如何用这些框架创建控件吗?我创建了一个游乐场并调用类或这些子函数,但它没有显示结果。你能告诉我如何调用类可以让它像你一样显示视觉表示吗?
尝试按照这些教程进行操作。 possiblemobile.com/2015/03/…【参考方案2】:
不建议在图像视图中添加子视图。即使你这样做了,如果图像视图被隐藏,那么它的所有子视图也将被隐藏。当视图被隐藏时,用户交互无论如何都不会发生。
您应该将按钮添加到 self.view 并将其放在图像视图的顶部,而不是将其放在图像视图内。试试这个代码。
func createPicker()
picker.frame = CGRect(x: ((self.view.frame.width / 2) - 143), y: 200, width: 286, height: 291)
picker.alpha = 0
picker.hidden = true
picker.userInteractionEnabled = true
picker.clipsToBounds = false
self.view.addSubview(picker)
let offset = 100
let buttonProfile:UIButton = UIButton(type: UIButtonType.Custom) as UIButton
buttonProfile.frame = CGRect(x: 140, y: offset, width: 260, height: 43)
buttonProfile.setTitleColor(UIColor(red: 0.85, green: 0.22, blue: 0.71, alpha: 1.0), forState: .Normal)
// button.setTitleColor(UIColor(rgba: feeling["color"]!), forState: .Normal)
buttonProfile.setTitle("My profile", forState: .Normal)
buttonProfile.tag = 0
buttonProfile.addTarget(self, action: "myAccount:", forControlEvents: UIControlEvents.TouchUpInside)
self.view.addSubview(buttonProfile)
您的按钮偏移量也在屏幕外。我将其设置为 100 以使其出现在屏幕上。您可以根据自己的要求进行定位。
【讨论】:
picker.hidden 并不总是错误的。当我单击“我的帐户”按钮时,这将是真的。我只是更新我的代码。我想对“我的帐户”按钮实现下拉菜单效果,所以我需要将 UIImageView 设置为在单击“我的帐户”时消失并出现。我的按钮偏移在我的屏幕上工作(我使用的模拟器是 iphone6,它在我期望的位置)【参考方案3】:您的选择器视图 alpha 为 0,隐藏为真。删除这些
picker.alpha = 0
picker.hidden = true
行。
更新这一行
buttonProfile.addTarget(self, action: "clickProfile", forControlEvents: UIControlEvents.TouchUpInside)
到
buttonProfile.addTarget(self, action: "clickProfile:", forControlEvents: UIControlEvents.TouchUpInside)
【讨论】:
没有。我需要选择器是透明的。并将 action: "clickProfile" 修改为 action: "clickProfile:" 仍然对我不起作用。 当我单击另一个按钮 myAccount 时,应该会出现 UIImageView。当我再次单击 myAccount 时,它应该会消失。 使用picker.backgroundColor = UIColor.clearColor() 使其透明,以上是关于UIImageView 上的按钮不可点击的主要内容,如果未能解决你的问题,请参考以下文章
在 iOs 中调用按钮 setBackgroundImage 后 UIImageView 位置发生变化