2017-08-18 24 views
7

Moim celem jest pokazanie View Controller programowoJak programować programowo kontroler pop over view?

Aktualny View Controller

enter image description here

a następnie, jeśli jakieś zdarzenie zostanie wywołany lub coś (API lub websocket) Chcę zadzwonić do tych poglądów programowo

enter image description here

Ale chcę wywołać ostatni widok kontrolera pierwszego i to ma być na szczycie Zobacz pierwszy kontroler

enter image description here

Więc technicznie ostatniej View będzie miał

Transition is Cross Dissolve 
Presentation is Over Current Context 

Jak to zrobić?

+0

wykorzystanie oddzielny widok (XIb) i załadować tam, gdzie trzeba, a następnie usunąć. – vaibhav

+0

Preferuję storyboard – sinusGob

+0

to jest popover i użyj storyboardu do końca projektu. – vaibhav

Odpowiedz

4

Zgodnie z wymaganiami możesz ustawić właściwość storyBoardID dla kontrolera nawigacyjnego.

Na szczególne wydarzenie właśnie wystąpienia kontroler nawigacyjny let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main) let myNavController = storyboard.instantiateViewController(withIdentifier: "MyStoryboardId") as? UINavigationController

wtedy obecny lub pokazać ten kontroler nawigacyjny

self.present(myNavController, animated: true, completion: nil)

Na viewDidLoad() sposobu pierwszego kontrolera widoku wykonać segue do popupViewController.

Teraz drugiView pokaże się nad pierwszym kontrolerem widoku. możesz wyłączyć ten widok po jego użyciu.

4

Nie musisz tworzyć całego UIViewController dla wyskakujących okienek.

Możesz pokazać zwykły UIView. Na przykład:

Utwórz widok programowo:

let popupView: UIView = { 
    let view = UIView() 
    view.backgroundColor = .red 
    view.translatesAutoresizingMaskIntoConstraints = false 
    return view 
} 

widok Insert kiedy trzeba:

private func showPopup() { 
    view.addSubview(popupView) 
    popupView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true 
    popupView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true 
    popupView.widthAnchor.constraint(equalToConstant: 100.0).isActive = true 
    popupView.heightAnchor.constraint(equalToConstant: 100.0).isActive = true 
} 

Również można dodawać widoki do swojejpopupView:

let myLabel: UILabel = { 
     let label = UILabel() 
     label.text = "Test text" 
     label.backgroundColor = .red 
     label.translatesAutoresizingMaskIntoConstraints = false 
     return label 
    } 

    private func setupPopup() { 
     // add UILabel for example 
     popupView.addSubview(myLabel) 
     // Setup constraints for myLabel 
     .... 
    } 
4

Myślę, że najlepszą metodą jest plik Xib do widoku wielokrotnego użytku. Następnie możesz utworzyć singleton i wywołać ten widok za każdym razem, gdy chcesz wyświetlić ten widok modalny.

Aby widok nie nakładał się na nic, należy dodać go nie do bieżącego kontrolera, ale do okna AppDelegate.

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
appDelegate.window!.addSubview(yourModalView) 
4

Można to zrobić poprzez nadpisanie swoją UIViewController podklasę inicjujące metod, jak ten.

class SomeViewController: UIViewController { 
    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
     self.modalTransitionStyle = .crossDissolve 
     self.modalPresentationStyle = .overFullScreen 
    } 

    override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) { 
     super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) 
     self.modalTransitionStyle = .crossDissolve 
     self.modalPresentationStyle = .overFullScreen 
    } 

    // if this is a xib UIViewController, if not do not add this code 
    required init() { 
     // place the "SomeViewController's Nib Name" in the nibName to prevent crashes from iOS 8 devices 
     super.init(nibName: "SomeViewController's Nib Name", bundle: nil) 
    } 
} 

Następnie na innych UIViewController s można zainicjować wspomnianego ViewController.

XIb i/lub programowo

// instantiate your UIViewController 
let viewController = SomeViewController() 
self.present(viewController, animated: true, completion: nil) 

storyboard

// instantiate the storyboard containing your UIViewController 
let storyboard = UIStoryboard(name: "StoryboardName", bundle: nil) 

// place UIViewController initialization inside if let block to prevent unwanted crashes 
if let viewController = storyboard.instantiateViewController(withIdentifier: "SomeViewController's Identifier") as? SomeViewController { 
    self.present(viewController, animated: true, completion: nil) 
} 

Upewnij się, że widok hierarchia wygląda to

enter image description here

ta powinna być ich właściwości

Zobacz

  • backgroundColor = .clear

Translucent Ciemne tło Zobacz

  • backgroundColor = .black
  • alfa = 0,4

Popover Zobacz

.. cokolwiek chcesz to być