2017-11-15 11 views
1

uitabbar 컨트롤러의 모든 탭 위에 uiview를 만들 수 있습니다. enter image description here "uiView.swift"라는 하나의 baseviewcontroller를 만들 계획이었습니다. "uiView.swift"에서 uiview를 추가했습니다. 그 후 해당 uiView.swift 각 뷰어 ViewController ("resturent.swift")를 상속하고 싶습니다. 그래서, UITabBarController의 각 탭에서 "uiView.swift"뷰를 얻을 것입니다. resued.uiView.swift는 버튼 클릭시 뷰를 표시하는 버튼이있는 Storyboard의 ViewController에 연결됩니다. 여기 내 "uiView.swift"입니다.UITabBarController의 모든 탭 위에 UIView를 만드는 방법

I (즉, "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이다 TabBar의 컨트롤러의 각 탭의 "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) 

    } 


} 

UICollectionViewController 유형입니다 .UiView.swift에서 로그인 할 수있는 app의 진입 점을 변경할 수 있습니다. View Controller (Viewcontroller.swift)를 실행하여 app.How 상속으로 재사용 할 수 있습니다. uiView.swift의보기?이 링크에서 프로젝트를 다운로드 할 수 있습니다. https://drive.google.com/file/d/1XSwOZcfvglB_7Zt_E8W8W3Dym3i1_lrB/view?usp=sharing

+0

tabBarController에서 popUp을 만들고 있으며 현재 표시중인 모든보기 위에이 팝업을 표시하고 싶습니다. 권리? –

+0

tabBarController의 popUp에서 버튼 클릭 –

+0

버튼을 클릭 할 때 현재 수행중인 작업을 강조 표시 할 수 있습니까? uiView.swift에서 –

답변

0

보기에 메뉴보기를 추가하면 안됩니다. 이 대신 AppDelegate에서 창에 직접 추가 할 수 있습니다. 창에보기를 추가하면 현재 보이는 모든보기 위에 표시됩니다.

+0

앱의 진입 점을 uiView.swift에서 로그인 View 컨트롤러 (Viewcontroller)로 변경할 수 있습니다. 신속) 앱을 실행합니다. –

+0

나는 모든 탭바 컨트롤러에 uiview를 갖고 싶다. 모든 탭바 컨트롤러에 대해 uiview를 가지고 있다고 생각하는 방식은 uiView.Swift에서 탭 막대 컨트롤러의 모든 탭으로보기를 상속하는 것이다.이 작업을 어떻게 수행 할 수 있는가? ? –

+0

왜 모든보기 컨트롤러에있는 항목에 표시하고 싶습니까? 위의 내용 중 하나만 표시하면됩니다. –