2015-11-29 18 views
6

Quindi sto lavorando su una semplice app, in cui utilizzo una vista tabella. Questa vista tabella mostra il nome di "giocatori". Ma per poter aggiungere giocatori nella visualizzazione tabella, voglio che venga visualizzata una finestra pop-up con un campo di testo in cui fornisci il nome.Come creare una vista pop-up personalizzata con swift?

Ora sto leggendo sulla creazione di un file xib o pennino, ma non sono sicuro di come "caricare" la finestra pop-up.

Qual è l'approccio migliore?

appare come questa

Pop up View

enter image description here

risposta

10

devi creare un costume UIView con tutti gli oggetti necessari rispettato, dal viewDidLoad del controller() si nasconderlo.

customView.hidden = true 

Ogni volta che l'utente desidera eseguire una certa azione o di attività, è riapparire e una volta che l'utente finito poi nascondere di nuovo o togliere dal Superview.

customView.hidden = false 

Qui di seguito c'è il codice per aiutarvi a iniziare

private var customView: UIView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     customView.hidden = true 
    } 

    private func loadCustomViewIntoController() { 
     let customViewFrame = CGRect(x: 0, y: 0, witdh: view.frame.width, height: view.frame.height - 200) 
     customView = UIView(frame: customViewFrame) 

     view.addSubview(customView) 

     customView.hidden = false 

     // any other objects should be tied to this view as superView 
     // for example adding this okayButton 

     let okayButtonFrame = CGRect(x: 40, y: 100, width: 50, height: 50) 
     let okayButton = UIButton(frame: okayButtonFrame) 

     // here we are adding the button its superView 
     customView.addSubview(okayButton) 

     okayButton.addTarget(self, action: #selector(self.didPressButtonFromCustomView:), forControlEvents:.TouchUpInside) 

    } 


    func didPressButtonFromCustomView(sender:UIButton) { 
     // do whatever you want 
     // make view disappears again, or remove from its superview 
    } 


    @IBAction func rateButton(sender:UIBarButtonItem) { 
     // this barButton is located at the top of your tableview navigation bar 
     // when it pressed make sure you remove any other activities that were on the screen, for example dismiss a keyboard 

      loadCustomViewIntoController() 
    } 

Check it out questa github project, E 'chiuso per essere pronti per la produzione, ti dà un modo migliore per affrontare (presente e congedo) con UIViews

Se si desidera solo il nome del giocatore, utilizzare un contatore UIAlertController aining un campo di testo

+0

Ho lavorato su questa opzione, il problema è che sul tabellone è un po 'difficile da implementare visto che sto lavorando con una tableview e non c'è dove posizionare il "UIView". O almeno non so come fare quella parte. Se aggiungo una vista in alto, è una vista per l'intestazione, o in fondo è una vista per il piè di pagina. Aggiungerò uno screenshot al post originale di ciò che intendo. –

+0

non è necessario trascinare l'UIView in cima al tableview ... potresti creare l'UIView tramite codice vuoi vedere un esempio? – Lamar

+0

Per favore .. Mi sono girato intorno a questo. –

8

In storyboard

  • In storyboard crearne uno UIViewController e progettare secondo il vostro requisito.
  • Imposta classe personalizzata come anotherViewController e Storyboard_ID come another_view_sid
  • Creare una nuova Cocoa Touch classe come anotherViewController e sottoclasse di UIViewController

In viewController

let popvc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "another_view_sid") as! anotherViewController 

    self.addChildViewController(popvc) 

    popvc.view.frame = self.view.frame 

    self.view.addSubview(popvc.view) 

    popvc.didMove(toParentViewController: self) 

In anotherViewController

override func viewDidLoad() { 
    super.viewDidLoad() 
     showAnimate() 
    } 
} 

@IBAction func Close_popupView(_ sender: Any) { 
    removeAnimate() 
} 

func showAnimate() 
{ 
    self.view.transform = CGAffineTransform(scaleX: 1.3, y: 1.3) 
    self.view.alpha = 0.0 
    UIView.animate(withDuration: 0.25, animations: { 
     self.view.alpha = 1.0 
     self.view.transform = CGAffineTransform(scaleX: 1.0, y: 1.0) 
    }) 
} 

func removeAnimate() 
{ 
    UIView.animate(withDuration: 0.25, animations: { 
     self.view.transform = CGAffineTransform(scaleX: 1.3, y: 1.3) 
     self.view.alpha = 0.0 
    }, completion: {(finished : Bool) in 
     if(finished) 
     { 
      self.willMove(toParentViewController: nil) 
      self.view.removeFromSuperview() 
      self.removeFromParentViewController() 
     } 
    }) 
} 
+0

molto bello, funzionante! –

Problemi correlati