2017-06-04 4 views
0

Ich versuche ein Menü zu zeigen, wenn ich auf die Navigationsleiste klicke (Wie Instagram wenn man mehrere Accounts benutzt). So , das ist, was ich habe:Swift - Button funktioniert nicht über UICollectionView

enter image description here

Und mit dem Menü: enter image description here

Die Liste in die Menü-Schaltflächen, die in Code hinzugefügt werden. Mein Problem ist, dass nur die erste Schaltfläche funktioniert ... Nach mehreren Tests funktioniert es, weil diese Schaltfläche oberhalb der Suchleiste ist. Aber wenn eine Schaltfläche über der UICollectionView ist, funktioniert es nicht mehr.

habe ich versucht, mit der postiion der Schicht zu spielen:

currentView.layer.zPosition = 2 

Aber es funktioniert nicht ... Haben Sie eine Vorstellung davon, was ich Knopf über der UICollection Ansicht aktivieren tun könnte?

Dies ist der Code, der die Collection zu starten:

func collectionViewLaunch() { 

     // Layout of collectionView 
     let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout() 

     layout.itemSize = CGSize(width: self.view.frame.size.width * 0.47, height: self.view.frame.size.width * 0.47) 

     layout.scrollDirection = UICollectionViewScrollDirection.vertical 

     let frame = CGRect(x: 0, y: 44, width: self.view.frame.size.width, height: self.view.frame.size.height - self.tabBarController!.tabBar.frame.size.height - self.navigationController!.navigationBar.frame.size.height - 62) 

     layout.sectionInset = UIEdgeInsets(top: 8, left: 8, bottom: 8, right: 8) 

     collectionView = UICollectionView(frame: frame, collectionViewLayout: layout) 
     collectionView.delegate = self 
     collectionView.dataSource = self 
     collectionView.alwaysBounceVertical = true 
     collectionView.backgroundColor = UIColor.white 
     self.view.addSubview(collectionView) 

     // Define cell for collectionView 
     collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "Cell") 

     // Call function to load posts 
     loadPosts() 

    } 

Vielen Dank im Voraus

EDIT:

Erstellung von Schaltflächen (die Ansicht ist die Menüansicht):

func menuTapped(_ list: Array<String>, view: UIView, xCoord: CGFloat, yCoord: CGFloat, buttonWidth: CGFloat, buttonHeight: CGFloat){ 

     var yCoord = yCoord 
     var itemCount = 0 

     for i in 0 ..< list.count { 
     itemCount = i 

     let listButton = UIButton(type: .custom) 
     listButton.frame = CGRect(x: xCoord, y: (yCoord), width: buttonWidth, height: 45) 
     // istButton.tag = itemCount 
     listButton.addTarget(self, action: #selector(self.menuButtonTapped(_:)), for: .touchUpInside) 
     listButton.setTitle("\(list[i])", for: .normal) 
     listButton.setTitleColor(UIColor(red: 109/255, green: 109/255, blue: 109/255, alpha: 1), for: .normal) 
     listButton.titleLabel?.font = UIFont.systemFont(ofSize: 15, weight: UIFontWeightThin) 
     listButton.tag = itemCount 

     // Add Buttons in the Scroll View 
     yCoord += buttonHeight 
     view.addSubview(listButton) 
     } 
    } 

    func menuButtonTapped(_ sender: Any){ 
     let button = sender as! UIButton 
     // let tmpButton = self.view.viewWithTag(button.tag) as? UIButton 

     print(button.tag) 
    } 

In der Ansicht geladen wurde:

sportMenuView = UIView(frame: CGRect(x: 0, y: CGFloat(-menuSport.count * 45), width: self.view.frame.size.width, height: CGFloat(menuSport.count * 45))) 
     sportMenuView.backgroundColor = UIColor.white 
     self.view.addSubview(sportMenuView) 
     sportMenuView.layer.zPosition = 2 

menuTapped(menuSport, view: sportMenuView, xCoord: xCoord, yCoord: yCoord, buttonWidth: buttonWidth, buttonHeight: buttonHeight) 
+1

Wo fügen Sie Schaltfläche hinzu? Bitte teilen Sie den Code, um herauszufinden, wo ein Problem ist. –

+0

Es ist bearbeitet, wenn Sie Fragen dazu haben, fühlen Sie sich frei. Vielen Dank ! – KevinB

+1

Ich habe eine einfache App mit Ihrem Code gehackt und alle Schaltflächen funktionieren gut, sogar die über der CollectionView. Machst du in den Zellen einen ungewöhnlichen Berührungsdiebstahl (Gestenerkennung?)? Vielleicht könnten Sie 'sammlungView.isUserInteractionEnabled = false 'versuchen, wenn Sie das Menü anzeigen? – Magnas

Antwort

0

Es war ziemlich einfach ...

Ich zog die collectionViewLaunch() Funktion vor dem subview-Menü hinzuzufügen.

In der Tat ist in diesem Fall die Ansicht des Menüs über der CollectionView.

Verwandte Themen