Я создал подкласс UITabBarController в своем приложении iOS, потому что я хотел добавить среднюю кнопку «+» на панели вкладок. Я добавил эту дополнительную кнопку, используя код ниже:
class XGTabBarViewController: UITabBarController {
let menuButton = UIButton(frame: CGRect(x: 0, y: 0, width: 70, height: 70))
private let optionMenu = UIAlertController(title: nil, message: "New", preferredStyle: .actionSheet)
override func viewDidLoad() {
super.viewDidLoad()
let action1 = UIAlertAction(title: "Action 1", style: .default)
let action2 = UIAlertAction(title: "Action 2", style: .default)
let cancelAction = UIAlertAction(title: "Cancel", style: .cancel)
optionMenu.addAction(action1)
optionMenu.addAction(action2)
optionMenu.addAction(cancelAction)
var menuButtonFrame = menuButton.frame
let iconConfig = UIImage.SymbolConfiguration(pointSize: 24, weight: .medium, scale: .medium)
let iconImage = UIImage(systemName: "plus", withConfiguration: iconConfig)
let icon = UIImageView(frame: CGRect(x: 0, y: 0, width: 30, height: 30))
icon.image = iconImage
icon.tintColor = UIColor.white
menuButtonFrame.origin.y = view.bounds.height - menuButtonFrame.height - 50
menuButtonFrame.origin.x = view.bounds.width/2 - menuButtonFrame.size.width/2
menuButton.frame = menuButtonFrame
menuButton.backgroundColor = UIColor(named: "LinkBlue")
menuButton.layer.cornerRadius = menuButtonFrame.height/2
menuButton.layer.shadowColor = UIColor.black.cgColor
menuButton.layer.shadowRadius = 3
menuButton.layer.shadowOpacity = 0.3
menuButton.layer.shadowOffset = CGSize(width: 0, height: 3)
menuButton.addSubview(icon)
icon.translatesAutoresizingMaskIntoConstraints = false
icon.widthAnchor.constraint(equalToConstant: 30).isActive = true
icon.heightAnchor.constraint(equalToConstant: 30).isActive = true
icon.centerXAnchor.constraint(equalTo: menuButton.centerXAnchor).isActive = true
icon.centerYAnchor.constraint(equalTo: menuButton.centerYAnchor).isActive = true
view.addSubview(menuButton)
menuButton.addTarget(self, action: #selector(menuButtonAction(sender:)), for: .touchUpInside)
view.layoutIfNeeded()
}
@objc private func menuButtonAction(sender: UIButton) {
self.present(optionMenu, animated: true, completion: nil)
}
Я настраиваю контроллер панели вкладок через IB. И вот как это выглядит
Итак, что я хочу знать, так это то, стоит ли мне определять действие кнопки меню в этом классе? Или есть лучший (лучший метод) способ сделать это?
Как видите, я попытался добавить лист действий, который будет отображаться при нажатии кнопки. Но я получаю некоторые ошибки макета. Мне интересно, если я добавил этот код в нужном месте.
Я получаю сообщение об ошибке ниже:
Спасибо!