如何解决为什么委托模式不适用于 TabBarController 的自定义视图?
我正在创建一个项目并使用故事板为我的 VC 创建一个标签栏控制器。 然后在第一个控制器中,我隐藏标签栏并向标签栏添加自定义视图。
self.tabBarController?.view.addSubview(customTabBarView)
这个自定义视图有一个视图,其中包含带有三个按钮的堆栈视图,对于交互,我实现了委托模式,但是,这不起作用,我不明白为什么。我做错了什么?如果我在 VC 中创建这个视图但不像自定义视图类,这是否有效?
我做这个“技巧”是因为不想为我的标签栏创建自定义形状。我的想法是隐藏标签栏控制器,然后添加带有标签栏下方按钮的自定义视图,并使用按钮在控制器之间切换。
我的自定义视图:
import UIKit
protocol GeneralViewButtons {
func pressButton(number: Int)
}
class GeneralView: UIView {
var delegate: GeneralViewButtons?
var width: CGFloat!
var height: CGFloat!
var Yposition: CGFloat!
var Xposition: CGFloat!
lazy var TabBar: UIView = {
let fillColor = UIColor(red: 0.118,green: 0.118,blue: 0.149,alpha: 1.000)
let viewGeneral = UIView()
viewGeneral.frame = CGRect(x: Xposition,y: Yposition - height - (Xposition + (Xposition / 2)),width: width - (Xposition * 2),height: height)
viewGeneral.backgroundColor = fillColor
viewGeneral.layer.cornerRadius = 20
viewGeneral.clipsToBounds = true
viewGeneral.layer.shadowColor = UIColor.gray.cgColor
viewGeneral.layer.shadowOpacity = 1.0
viewGeneral.layer.shadowOffset = CGSize(width: 0,height: 0)
viewGeneral.layer.shadowRadius = 10
viewGeneral.layer.masksToBounds = false
return viewGeneral
}()
lazy var stack: UIStackView = {
let stack = UIStackView()
stack.frame = CGRect(x: 0,y: 0,height: height)
stack.layer.borderWidth = 1
stack.layer.borderColor = #colorLiteral(red: 1.0,green: 1.0,blue: 1.0,alpha: 1.0)
stack.spacing = 30
stack.distribution = .fillEqually
stack.axis = .horizontal
stack.addArrangedSubview(but1)
stack.addArrangedSubview(but2)
stack.addArrangedSubview(but3)
return stack
}()
lazy var but1: UIButton = {
let but = UIButton(frame: CGRect(x: 0,width: 50,height: 50))
but.backgroundColor = .red
but.addTarget(self,action: #selector(click1(_:)),for: .touchUpInside)
return but
}()
lazy var but2: UIButton = {
let but = UIButton(frame: CGRect(x: 0,height: 50))
but.backgroundColor = .green
but.addTarget(self,action: #selector(click2(_:)),for: .touchUpInside)
return but
}()
lazy var but3: UIButton = {
let but = UIButton(frame: CGRect(x: 0,height: 50))
but.backgroundColor = .blue
but.addTarget(self,action: #selector(click3(_:)),for: .touchUpInside)
return but
}()
init(frame: CGRect,x: CGFloat,y: CGFloat,width: CGFloat,height: CGFloat) {
self.width = width
self.height = height
self.Yposition = y
self.Xposition = x
super.init(frame: frame)
self.addSubview(TabBar)
self.TabBar.addSubview(stack)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
@objc func click1(_ sender: UIButton) {
delegate?.pressButton(number: 1)
}
@objc func click2(_ sender: UIButton) {
delegate?.pressButton(number: 2)
}
@objc func click3(_ sender: UIButton) {
delegate?.pressButton(number: 3)
}
}
我的第一个风投:
import Foundation
import UIKit
class HomeVC: UIViewController,GeneralViewButtons {
var customTabBarView: GeneralView!
override func viewDidLoad() {
self.view.backgroundColor = .blue
createGradientLayer()
hideTabBar()
setupView()
}
//MARK: Delegate
func pressButton(number: Int) {
print(number)
}
func setupView() {
customTabBarView = GeneralView(frame: CGRect(x: 0,width:0,height: 0),x: 20,y: UIScreen.main.bounds.maxY,width: UIScreen.main.bounds.width,height: 70)
self.tabBarController?.view.addSubview(customTabBarView)
}
func createGradientLayer() {
GeneralSettings.shared.background(mainView: self.view)
}
func hideTabBar() {
self.tabBarController?.tabBar.isHidden = true
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。