Пользовательская кнопка UIB в панели вкладок не может быть скрыта - PullRequest
1 голос
/ 31 мая 2019

Перед тем как задать вопрос, я прошел через многие вопросы о Stacksoverflow. Никто не смог решить мою проблему. Я сделал пользовательскую кнопку, используя

class TabBarViewController: UITabBarController {

let button = UIButton.init(type: .custom)

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    button.setImage(UIImage(named: "assetIcon"), for: .normal)
    button.backgroundColor = .blue
    button.layer.cornerRadius = 35

    self.view.insertSubview(button, aboveSubview: self.tabBar)
    self.view.layoutIfNeeded()
}

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    let distance =  ((self.view.bounds.height)/100)*11

    // safe place to set the frame of button manually
    button.frame = CGRect.init(x: self.tabBar.center.x - 32, y: self.view.bounds.height - distance, width: 70, height: 70)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func hideTabButton() {
    self.button.isHidden = true
}

func showTabButton() {
    self.button.isHidden = false
   }
}

Однако, когда я вызвал функцию hideTabButton из другого представления, где я хочу скрыть ее, кнопка все еще отображается .. Я вызвал функцию из

 override func viewDidAppear(_ animated: Bool) {
    let vc = storyboard?.instantiateViewController(withIdentifier: "tabBarVC") as! TabBarViewController
    vc.hideTabButton()
}

Кнопка не скрывалась. Кто-нибудь с решением или руководством, которое может помочь?

1 Ответ

1 голос
/ 31 мая 2019

Вы пытаетесь скрыть его до его создания, вы только что создали экземпляр TabBarViewController, сейчас вы просто должны передать флаг с текущего экрана на экран TabBarViewController, а затем на экран TabBarViewController. Выполните следующее.

class TabBarViewController: UITabBarController {
var hideButton:Bool = false
let button = UIButton.init(type: .custom)

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    button.setImage(UIImage(named: "assetIcon"), for: .normal)
    button.backgroundColor = .blue
    button.layer.cornerRadius = 35
    self.view.insertSubview(button, aboveSubview: self.tabBar)
    self.view.layoutIfNeeded()
}

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    let distance =  ((self.view.bounds.height)/100)*11

    // safe place to set the frame of button manually
    button.frame = CGRect.init(x: self.tabBar.center.x - 32, y: self.view.bounds.height - distance, width: 70, height: 70)
    button.isHidden = hideButton
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func hideTabButton() {
    self.button.isHidden = true
}

func showTabButton() {
    self.button.isHidden = false
   }
}

Теперь просто передайте логическое значение TabbarViewController, если оно еще не было создано

override func viewDidAppear(_ animated: Bool) {
  let vc = storyboard?.instantiateViewController(withIdentifier: "tabBarVC") as! TabBarViewController
  vc.hideButton=true
}

Если ваша панель вкладок уже создана, не устанавливайте ее снова, просто получите доступ к ней, как показано ниже

if let tabController = self.tabbarController as? TabbarViewController{ tabController.button.isHidden = true }

И при попытке вернуть его обратно просто измените true на false

if let tabController = self.tabbarController as? TabbarViewController{ tabController.button.isHidden = false }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...