Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift-刷新自定义UITABBARC控制器条_Ios_Swift_Uitabbarcontroller_Uitabbar - Fatal编程技术网

Ios Swift-刷新自定义UITABBARC控制器条

Ios Swift-刷新自定义UITABBARC控制器条,ios,swift,uitabbarcontroller,uitabbar,Ios,Swift,Uitabbarcontroller,Uitabbar,我有一个自定义选项卡栏,在选项卡栏上方有一个凸起的中间按钮。当用户尚未完成日常任务时,应显示SetupUncompleteMidleButton(),表明已完成。但是,一旦用户完成任务,我希望setupCompleteMiddleButton()出现,表明用户已完成任务。我不知道怎么做-我不应该在控制器中调用viewDidLoad(),调用它时,它不会刷新视图。刷新选项卡栏没有任何作用 这是我的TabBar控制器: class TabBarController: UITabBarControll

我有一个自定义选项卡栏,在选项卡栏上方有一个凸起的中间按钮。当用户尚未完成日常任务时,应显示SetupUncompleteMidleButton(),表明已完成。但是,一旦用户完成任务,我希望setupCompleteMiddleButton()出现,表明用户已完成任务。我不知道怎么做-我不应该在控制器中调用viewDidLoad(),调用它时,它不会刷新视图。刷新选项卡栏没有任何作用

这是我的TabBar控制器:

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添加一个委托来触发中间按钮的更改的原因。谢谢