为啥由 UITabBarController.viewDidLoad 中的代码添加的自定义按钮不响应选择器
Posted
技术标签:
【中文标题】为啥由 UITabBarController.viewDidLoad 中的代码添加的自定义按钮不响应选择器【英文标题】:why does a custom button which added by code in UITabBarController.viewDidLoad doesn't response the selector为什么由 UITabBarController.viewDidLoad 中的代码添加的自定义按钮不响应选择器 【发布时间】:2019-06-06 04:48:26 【问题描述】:我在MyViewController.viewDidLoad(subclass of UITabBarController)
的 tabBar 中添加了一个自定义按钮
但我发现它没有响应选择器。
如果我延迟一秒钟添加按钮(in DispatchQueue.main.asyncAfter closure
),它可以正常工作。
我认为这不是解决问题的正确方法。
func addButton()
let button = UIButton(type: UIButton.ButtonType.custom)
button.bounds = CGRect(x:0,y:0,width:30,height:30);
button.backgroundColor = UIColor.red
button.center = CGPoint(x:self.tabBar.frame.size.width/2, y:self.tabBar.frame.size.height/2 - 20);
button.addTarget(self, action: #selector(click(button:)), for: UIControl.Event.touchUpInside)
tabBar.addSubview(button)
【问题讨论】:
你在哪里调用这个方法? 在override func viewDidLoad()
可以添加函数click(button:)
的代码吗?
【参考方案1】:
您已将按钮添加到UITabBarController
的UITabBar
,因为按帧,按钮的一半将显示在选项卡栏上方,另一半显示在选项卡栏下方。
所以我猜你不会点击那个按钮的一部分,它不在 Tabbar(Tabbar 上方)不会被触摸。我会让按钮变大或者尝试在模拟器中点击箭头,你会明白的。
如果您需要底部有按钮但略高,请创建自定义Tabbar来实现这样的设计。或者,您可以将该按钮添加到 UITabBarController
的视图中,而不是 Tabbar。
class MyTabBarController: UITabBarController
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view.
self.addButton()
func addButton()
let button = UIButton(type: UIButton.ButtonType.custom)
button.bounds = CGRect(x:0,y:0,width:50,height:50); //1
button.backgroundColor = UIColor.purple
button.center = CGPoint(x:self.tabBar.frame.size.width/2, y:self.tabBar.frame.size.height/2 - 50 + self.tabBar.frame.origin.y); //2
button.addTarget(self, action: #selector(click(button:)), for: UIControl.Event.touchUpInside)
button.layer.cornerRadius = button.frame.size.height/2
button.layer.masksToBounds = false
button.layer.shadowColor = UIColor.black.withAlphaComponent(0.5).cgColor
button.layer.shadowRadius = 5.0
button.layer.shadowOffset = CGSize(width: 0.0, height: 5.0)
button.layer.shadowOpacity = 0.5
//tabBar.addSubview(button) //3
self.view.addSubview(button). //4
@objc func click(button: UIButton)
print("Button get clicked")
我在行尾用数字注释了四件事,您可以在代码中制作并尝试。
【讨论】:
以上是关于为啥由 UITabBarController.viewDidLoad 中的代码添加的自定义按钮不响应选择器的主要内容,如果未能解决你的问题,请参考以下文章
为啥所有标签_都是-1?由 DBSCAN 在 Python 中生成
为啥这个由 facebook 生成的深层链接(applink)不起作用?
为啥这个 PHP 脚本(由 AJAX 调用)随机无法正确加载 SESSION?
如果部分写入参与超时块,为啥由 document.write 创建的文档呈现方式不同?