gpt4 book ai didi

ios - 为什么通过 UITabBarController.viewDidLoad 中的代码添加的自定义按钮不响应选择器

转载 作者:行者123 更新时间:2023-11-29 05:42:01 25 4
gpt4 key购买 nike

我在 MyViewController.viewDidLoad(UITabBarController 的子类)中向 tabBar 添加了一个自定义按钮

但我发现它没有响应选择器。

如果我延迟一秒钟添加按钮(在 DispatchQueue.main.asyncAfter 关闭中),它就可以正常工作。

我认为这不是解决问题的正确方法。

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)
}

最佳答案

您已将按钮添加到 UITabBarControllerUITabBar 中,因为按钮的一半将出现在每个帧的选项卡栏上方,一半显示在选项卡栏下方。

Tabbar custode button

所以我想您不会点击该按钮的一部分,该按钮超出选项卡栏(选项卡栏上方)的部分不会被触摸。我会让按钮变大或者尝试在模拟器中点击箭头,你就会明白了。

如果您需要在底部但稍上方有按钮,那么请创建自定义选项卡栏来实现这样的设计。或者,您可以将该按钮添加到 UITabBarController 的 View 中,而不是 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")
}
}

我在行尾标记了四件事,并用数字注释,您可以在代码中进行尝试。

Button in TabBarController

关于ios - 为什么通过 UITabBarController.viewDidLoad 中的代码添加的自定义按钮不响应选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56471034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com