2017-07-22 2 views
0

Ich versuche einen Blick vor einen anderen zu bringen. Die Ansicht ist ausgeblendet und wird beim Tippen auf eine Schaltfläche angezeigt. Dies ist die Hierarchie ich habe:Swift - Hierarchie anzeigen

enter image description here

Die Ansicht, die ich vor mitbringen müssen ist die Info-Ansicht

ich versucht habe zu tun, so:

infoView.superview?.bringSubview(toFront: infoView) 

aber es didn ‚t arbeiten ich habe versucht, mit dem z-Index

infoView.layer.zPosition = 100 

aber hat auch nicht funktioniert ...

Irgendwelche Idee?

Update: hier ist der Code der Taste, die funktioniert:

@IBOutlet var infoButtons: [UIButton]! 

@IBAction func infoButtonPressed(_ sender: UIButton) {if sender.tag == 8 { 
     if constraint.count > 0 { 
      NSLayoutConstraint.deactivate(constraint) 
      constraint.removeAll() 
     } 
     let alignYConstraint = NSLayoutConstraint(item: infoView, attribute: .centerY, relatedBy: .equal, toItem: infoButtons[7], attribute: .centerY, multiplier: 1.0, constant: 0) 
     NSLayoutConstraint.activate([alignYConstraint]) 
     constraint.append(alignYConstraint) 
     self.infoView.textView.scrollRangeToVisible(NSMakeRange(0, 0)) 
     infoView.isHidden = false 
infoView.superview?.bringSubview(toFront: infoView) 
} 

UPDATE:

ich eine Nib-Datei haben, die hier zum infiView hinzugefügt wird, ist der Code für die Xib:

import UIKit 
class InfoView: UIView { 

@IBOutlet var contentView: UIView! 
@IBOutlet weak var textView: UITextView! 

var onClickCallback: (() -> Void)? 

override init(frame: CGRect) { 
    super.init(frame: frame) 
    commonInit() 
} 

required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
    commonInit() 
} 

private func commonInit() { 
    Bundle.main.loadNibNamed("InfoView", owner: self, options: nil) 
    addSubview(contentView) 
    contentView.frame = self.bounds 
    contentView.autoresizingMask = [.flexibleHeight, .flexibleWidth] 
    textView.backgroundColor = UIColor.clear 

} 
    @IBAction func closeInfoViewPressed(_ sender: Any) { 
    onClickCallback?() 
    } 
} 

In der anderen VC ich eine Ansicht hinzufügen und es die Klasse InfoView zuweisen. InfoView ist versteckt und beim Klicken wird sichtbar. Ich versuche, es vor dem Header zu bringen, wenn angezeigt wird (das ist kein Nav-Controller, sondern eine benutzerdefinierte Ansicht). Siehe Bild:

the nib File

the view when is showed

the view if i scroll down

+0

Offen gesagt, es sieht so aus, als ob Ihr 'bringSubview (toFront:)' funktionieren sollte. Sind Sie sicher, dass die Codezeile verarbeitet wird? Ich gehe davon aus, dass Sie überprüft haben, dass Ihre 'UIButton' IBAction korrekt funktioniert. – dfd

+0

@dfd yeah Ich bin sicher, dass der Button auch andere Aktionen ausführt, die korrekt ausgeführt werden. – Marco

+0

Wenn Sie sich die Eigenschaften von infoView ansehen, nachdem Sie die Darstellung von bowsubview vorgenommen haben, was für Rahmen und Grenzen und Sichtbarkeit? – solenoid

Antwort

0

Sie einen Rechtsklick auf Ihrer UIButton in der Hierarchie von Storyboard, um herauszufinden, ob Ihre Schaltfläche, um eine feste Verbindung hat. In vielen Fällen ist dies der Fall, wenn Menschen stecken bleiben. Möglicherweise müssen Sie die Schaltfläche vom Storyboard zum Code erneut verbinden. Sie sollten den Z-Index dafür nicht ändern müssen. Die erste Codezeile sollte funktionieren, abhängig davon, wo Sie den Code in Ihre Datei geschrieben haben.

+0

ich aktualisiere die Frage mit dem Button code – Marco

+0

die InfoView-Ansicht befindet sich in einer Scroll-Ansicht ... und ich versuche, sie vor eine Ansicht zu bringen, die sich außerhalb des Bildlaufs befindet. .. ist es möglich, dass dies das Problem ist? – Marco