如何在UITabBarController

时间:2017-11-15 06:28:13

标签: ios swift inheritance uiview uitabbarcontroller

在uitabbar控制器的所有选项卡上进行uiview。 enter image description here我打算制作一个名为" uiView.swift"的baseviewcontroller。 .In" uiView.swift"我添加了我的uiview。之后,我想从uiView.swift继承每个选项卡ViewController(说&​​#34; resturent.swift")。因此,在UITabBarController的每个选项卡中,您将获得" uiView.swift" view resued.uiView.swift连接到Storyboard中的ViewController,该按钮显示按钮单击时的视图。这是我的" uiView.swift"

class uiView: UIViewController {
var menuView: UIView?

    override func viewDidLoad() {
        super.viewDidLoad()
        menuView = UIView(frame: CGRect(x: 0, y: -200, width: 420, height: 200))
        menuView?.backgroundColor = UIColor.green
        view.addSubview(menuView!)
    }
    @objc func MyBag(){

    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
    @IBAction func collectionmenuone(_ sender: Any) {
       menuView=UIView(frame: CGRect(x: 0, y: 0, width: 420, height: 200))
        menuView?.backgroundColor=UIColor.lightGray
        self.view.addSubview(menuView!)

        var btnbag = UIButton(type: .roundedRect)
        btnbag.addTarget(self, action: #selector(self.MyBag), for: .touchUpInside)
        btnbag.frame = CGRect(x: 104, y:130 , width: 150, height: 60)
        btnbag.setTitle("Done", for: .normal)
        btnbag.backgroundColor=UIColor.green
        menuView?.addSubview(btnbag)

    }


}

我如何能够重复使用" uiView.swift"在tabbar控制器的每个标签中(即" resturent.swif")

class resturent:UICollectionViewController,UICollectionViewDelegateFlowLayout {

    override func viewDidLoad() {
        super.viewDidLoad()
        navigationItem.title="Seafood"
        collectionView?.backgroundColor=UIColor.white
        // view.backgroundColor=UIColor.redColor
        collectionView?.register(VideoCell.self, forCellWithReuseIdentifier: "cellid")
    }
    override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 5
    }
    override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell=collectionView.dequeueReusableCell(withReuseIdentifier: "cellid", for: indexPath)
        // cell.backgroundColor=UIColor.red
        return cell
    }
    /* override func collectionView(collectionView: UICollectionView, cellForItemAtIndexpath indexPath: NSIndexPath) -> UICollectionViewCell {
     let cell=collectionView.dequeueReusableCell(withReuseIdentifier: "cellId", for: indexPath as IndexPath)

     return cell
     }*/
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
        return 0
    }
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        let height=(view.frame.width - 16 - 16) * 9/16
        return  CGSize(width: view.frame.width, height: height + 16 + 68)
    }
}
class VideoCell:UICollectionViewCell{
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupView()
    }
    let thumbnailImageView:UIImageView = {
        let imageView=UIImageView()
        imageView.backgroundColor=UIColor.blue
        imageView.image=UIImage(named: "food24")
        imageView.contentMode = .scaleAspectFill
        imageView.clipsToBounds=true
        return imageView
    }()
    let userProfileImageView:UIImageView={
        let imageView=UIImageView()
        //imageView.backgroundColor=UIColor.green
        return imageView
    }()
    let separatorView:UIView = {
        let view = UIView ()
        view.backgroundColor=UIColor(red: 230/255, green: 230/255, blue: 230/255, alpha: 1)
        return view
    }()
    let titleLabel:UILabel={
        let label = UILabel()
        label.translatesAutoresizingMaskIntoConstraints=false
        label.text="Resturant name here"
        return label
    }()
    let subtitleTextView:UITextView = {
        let textView=UITextView()
        textView.translatesAutoresizingMaskIntoConstraints=false
        textView.textContainerInset=UIEdgeInsetsMake(0, -4, 0, 0)
        textView.textColor=UIColor.lightGray
        textView.text = "SeaFood"
        return textView
    }()
    func setupView()  {
        //backgroundColor=UIColor.blue
        addSubview(thumbnailImageView)
        addSubview(separatorView)
        addSubview(userProfileImageView)
        addSubview(titleLabel)
        addSubview(subtitleTextView)
        addConstraintsWithFormat(format: "H:|-16-[v0]-16-|", view: thumbnailImageView)
        addConstraintsWithFormat(format: "H:|-16-[v0(44)]", view: userProfileImageView)
        //vertial constratints
        addConstraintsWithFormat(format: "V:|-16-[v0]-8-[v1(44)]-16-[v2(1)]|", view: thumbnailImageView,userProfileImageView,separatorView)
        addConstraintsWithFormat(format: "H:|[v0]|", view: separatorView)
        //top constraints
        addConstraint(NSLayoutConstraint(item: titleLabel, attribute: .top, relatedBy: .equal, toItem:thumbnailImageView , attribute: .bottom, multiplier: 1, constant: 8))
        //left constaints
        addConstraint(NSLayoutConstraint(item: titleLabel, attribute: .left, relatedBy: .equal, toItem: userProfileImageView, attribute: .right, multiplier: 1, constant: 8))
        //right constraint
        addConstraint(NSLayoutConstraint(item: titleLabel, attribute: .right, relatedBy: .equal, toItem: thumbnailImageView, attribute: .right, multiplier: 8, constant: 0))
        //height constraint
        addConstraint(NSLayoutConstraint(item: titleLabel, attribute: .height, relatedBy: .equal, toItem: self, attribute: .height, multiplier: 0, constant: 20))

        //top constraints
        addConstraint(NSLayoutConstraint(item: subtitleTextView, attribute: .top, relatedBy: .equal, toItem:titleLabel , attribute: .bottom, multiplier: 1, constant: 4))
        //left constaints
        addConstraint(NSLayoutConstraint(item: subtitleTextView, attribute: .left, relatedBy: .equal, toItem: userProfileImageView, attribute: .right, multiplier: 1, constant: 8))
        //right constraint
        addConstraint(NSLayoutConstraint(item: subtitleTextView, attribute: .right, relatedBy: .equal, toItem: thumbnailImageView, attribute: .right, multiplier: 8, constant: 0))
        //height constraint
        addConstraint(NSLayoutConstraint(item: subtitleTextView, attribute: .height, relatedBy: .equal, toItem: self, attribute: .height, multiplier: 0, constant: 20))


        // addConstraintsWithFormat(format: "V:[v0(20)]", view: titleLabel)
        //  addConstraintsWithFormat(format: "H:|[v0]|", view: titleLabel)

    }
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}
extension UIView{
    func addConstraintsWithFormat(format:String,view:UIView...){
        var viewDictionary=[String:UIView]()
        for (index,view) in view.enumerated(){
            let key="v\(index)"
            view.translatesAutoresizingMaskIntoConstraints=false
            viewDictionary[key]=view
        }
        NSLayoutConstraint.activate(NSLayoutConstraint.constraints(withVisualFormat: format , options: NSLayoutFormatOptions(), metrics: nil, views: viewDictionary))
    }

}
uiView.swift的类型为UIViewController,resturent.swif的类型为UICollectionViewController。您可以将应用程序的入口点从uiView.swift更改为登录View控制器(Viewcontroller.swift)来运行app.How通过继承我可以重用uiView.swift中的视图?您可以从此链接下载项目。https://drive.google.com/file/d/1XSwOZcfvglB_7Zt_E8W8W3Dym3i1_lrB/view?usp=sharing

1 个答案:

答案 0 :(得分:0)

您不应在任何视图上添加菜单视图。您可以直接从AppDelegate将其添加到窗口中,而不是这样。 在窗口上添加视图会将其放在当前可见的所有视图上方。