Ios Swift-刷新自定义UITABBARC控制器条
我有一个自定义选项卡栏,在选项卡栏上方有一个凸起的中间按钮。当用户尚未完成日常任务时,应显示SetupUncompleteMidleButton(),表明已完成。但是,一旦用户完成任务,我希望setupCompleteMiddleButton()出现,表明用户已完成任务。我不知道怎么做-我不应该在控制器中调用viewDidLoad(),调用它时,它不会刷新视图。刷新选项卡栏没有任何作用 这是我的TabBar控制器:Ios Swift-刷新自定义UITABBARC控制器条,ios,swift,uitabbarcontroller,uitabbar,Ios,Swift,Uitabbarcontroller,Uitabbar,我有一个自定义选项卡栏,在选项卡栏上方有一个凸起的中间按钮。当用户尚未完成日常任务时,应显示SetupUncompleteMidleButton(),表明已完成。但是,一旦用户完成任务,我希望setupCompleteMiddleButton()出现,表明用户已完成任务。我不知道怎么做-我不应该在控制器中调用viewDidLoad(),调用它时,它不会刷新视图。刷新选项卡栏没有任何作用 这是我的TabBar控制器: class TabBarController: UITabBarControll
class TabBarController: UITabBarController, UITabBarControllerDelegate {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
}
override func viewDidLoad() {
super.viewDidLoad()
// This is where I currently decide which button to show the "complete" one if the task is done, and the incomplete one if not.
self.delegate = self
if UserData.hasCompletedDailyTask() == true {
setupCompleteMiddleButton()
} else {
setupIncompleteMiddleButton()
}
}
// Incomplete button
func setupIncompleteMiddleButton() {
let middleButton = UIButton(frame: CGRect(x: (self.view.bounds.width / 2) - 25, y: -20, width: 50, height: 50))
middleButton.backgroundColor = UIColor.systemYellow
middleButton.setImage(UIImage(systemName: "sun.max.fill"), for: .normal)
middleButton.imageView?.tintColor = UIColor.white
middleButton.layer.cornerRadius = middleButton.frame.width / 2
middleButton.clipsToBounds = true
self.tabBar.addSubview(middleButton)
middleButton.addTarget(self, action: #selector(self.middleButtonAction), for: .touchUpInside)
self.view.layoutIfNeeded()
}
// Complete button
func setupCompleteMiddleButton() {
let middleButton = UIButton(frame: CGRect(x: (self.view.bounds.width / 2) - 25, y: -20, width: 50, height: 50))
middleButton.backgroundColor = UIColor.systemGreen
middleButton.setImage(UIImage(systemName: "checkmark"), for: .normal)
middleButton.imageView?.tintColor = UIColor.white
middleButton.layer.cornerRadius = middleButton.frame.width / 2
middleButton.clipsToBounds = true
self.tabBar.addSubview(middleButton)
middleButton.addTarget(self, action: #selector(self.middleButtonAction), for: .touchUpInside)
self.view.layoutIfNeeded()
}
@objc func middleButtonAction(sender: UIButton) {
self.selectedIndex = 1
}
}
谢谢大家! 也许你可以试试这个:
导入UIKit
类TabBarController:UITabBarController,UITabBarController Delegate{
必需的初始化?(编码器aDecoder:NSCoder){
super.init(编码器:aDecoder)!
}
//TabbarController选择此按钮
var middleButton:UIButton!
重写func viewDidLoad(){
super.viewDidLoad()
//这就是我当前决定的按钮,如果任务完成,则显示“完成”按钮,如果任务未完成,则显示“未完成”按钮。
self.delegate=self
//taskCompletion是当UserData完成其任务时的回调
如果UserData.taskCompletion{
setupCompleteMiddleButton()
}
SetupUncompleteMidleButton()
}
//不完整按钮
func SetupUncompleteMidleButton(){
//初始化按钮
middleButton=ui按钮(帧:CGRect(x:(self.view.bounds.width/2)-25,y:-20,宽度:50,高度:50))
middleButton.backgroundColor=UIColor.systemYellow
setImage(UIImage(系统名:“sun.max.fill”),用于:。正常)
middleButton.imageView?.tintColor=UIColor.white
middleButton.layer.cornerRadius=middleButton.frame.width/2
middleButton.clipsToBounds=true
self.tabBar.addSubview(中间按钮)
middleButton.addTarget(self,action:#选择器(self.middleButtonAction),用于:。touchUpInside)
self.view.layoutifneed()
}
//完整按钮
func setupCompleteMiddleButton(){
//更改按钮颜色和图像
middleButton.backgroundColor=UIColor.systemGreen
setImage(UIImage(systemName:“checkmark”),用于:。正常)
}
@objc功能中间按钮操作(发送方:UIButton){
self.selectedIndex=1
}
}
您可以对按钮的全局单个对象尝试此操作,只要在任务完成或未完成时更改图像即可
class TabBarController: UITabBarController, UITabBarControllerDelegate {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
}
// TabbarController hode this button
var middleButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
setupButton()
// This is where I currently decide which button to show the "complete" one if the task is done, and the incomplete one if not.
self.delegate = self
// taskCompletion is a call back when UserData finish its task
if UserData.taskCompletion {
setupCompleteMiddleButton()
} else {
setupIncompleteMiddleButton()
}
}
func setupButton() {
middleButton = UIButton(frame: CGRect(x: (self.view.bounds.width / 2) - 25, y: -20, width: 50, height: 50))
middleButton.backgroundColor = UIColor.systemYellow
middleButton.layer.cornerRadius = middleButton.frame.width / 2
middleButton.clipsToBounds = true
self.tabBar.addSubview(middleButton)
middleButton.addTarget(self, action: #selector(self.middleButtonAction), for: .touchUpInside)
self.view.layoutIfNeeded()
}
// Incomplete button
func setupIncompleteMiddleButton() {
middleButton.backgroundColor = UIColor.systemYellow
middleButton.setImage(UIImage(systemName: "sun.max.fill"), for: .normal)
}
// Complete button
func setupCompleteMiddleButton() {
// change button color and image
middleButton.backgroundColor = UIColor.systemGreen
middleButton.setImage(UIImage(systemName: "checkmark"), for: .normal)
}
@objc func middleButtonAction(sender: UIButton) {
self.selectedIndex = 1
}
你想改变特定vc操作的中间按钮吗?这是否回答了你的问题@DimaRostopira我确实看到了这种反应。然而,我的是一个按钮,它位于酒吧顶部,并不是酒吧本身的一部分。。。其中的解决方案适用于栏中的项目,但不适用于上面的按钮?如果我错了,请纠正我…好吧,撤回接近投票。在这种情况下,我建议使用
NotificationCenter
@DimaRostopira了解,如何触发TabBar的重新加载,以便显示新按钮?这是我不让ITI添加一个委托来触发中间按钮的更改的原因。谢谢