почему пользовательская кнопка, добавленная кодом в UITabBarController.viewDidLoad, не отвечает селектору - PullRequest
0 голосов
/ 06 июня 2019

Я добавляю пользовательскую кнопку на панель вкладок в моем MyViewController.viewDidLoad(subclass of UITabBarController)

Но я обнаружил, что селектор не отвечает.

Если я добавляю одну секунду для добавления кнопки (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)
    }

1 Ответ

0 голосов
/ 07 июня 2019

Вы добавили кнопку к UITabBar из UITabBarController, так как половина части кнопки будет отображаться над панелью вкладок, а половина под панелью вкладок соответствует кадру.

Tabbar custode button

Так что, я думаю, вы не получите нажатие на ту часть кнопки, которая находится вне вкладки (над вкладкой) и не дотронется до нее.Если вы сделаете кнопку немного большой ИЛИ попытайтесь щелкнуть стрелкой в ​​симуляторе, вы поймете, что идея.

Если вам нужна кнопка внизу, но чуть выше, тогда создайте пользовательскую панель вкладок, чтобы добиться такого дизайна.Или же вы можете добавить эту кнопку в 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")
    }
}

Я пометил четыре вещи с прокомментированными числами в конце строк, которые вы можете внести в свой код и попробовать.

Button in TabBarController

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...