2017-06-22 2 views
2

Ich möchte eine kleine UItableView Popup, wenn geklickt und zeigt einige Zahlen in der Liste.Dropdown-Liste ios swift

Ich habe versucht, popoverPresentationController zu verwenden, aber es erscheint Vollbild für iOS (iPhone) Geräte.

unten ist der Code für gleiche -

let filterVC = TableViewController(nibName: "TableViewController", bundle: nil) 
       filterVC.preferredContentSize = CGSize(width: 300, height: 200) 

    filterVC.modalPresentationStyle = UIModalPresentationStyle.popover 

    present(filterVC, animated: true, completion: nil) 
    let popoverPresentationController = filterVC.popoverPresentationController 

    if let pop = filterVC.popoverPresentationController { 
     pop.delegate = self 
    } 

     popoverPresentationController?.sourceView = sender as? UIView 
    popoverPresentationController?.sourceRect = sender.frame 

// -------

mit folgenden Verfahren auch

func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle { 
    // Return no adaptive presentation style, use default presentation behaviour 
    return .none 
} 

// ----- Jeder Hinweis in die richtige Richtung würde sehr geschätzt werden. Arbeitsprobe wäre sehr hilfreich

Was ich wie unten

dropdwon 1

dropdown 2

Antwort

1

UPDATE

Es zu erreichen versuche, ist ein nützliches library Sie möchten geben ein Versuch.


Es ist, weil Ihr pop.delegate zugewiesen wurde, nachdem Sie die filterVC präsentieren.

Verschieben dieses

if let pop = filterVC.popoverPresentationController { 
    pop.delegate = self 
    pop.sourceView = sender 
    pop.sourceRect = sender.bounds 
} 
present(filterVC, animated: true, completion: nil) 

zum init Ihrer filterVC sollte es tun. Übrigens, ich habe nirgendwo gesehen, dass Sie sourceView und sourceRect für Ihre popoverPresentationController zugewiesen haben. Moving pop.delegate = self zu diesem Teil sollte angemessen sein. So etwas wie

init(for sender: UIView)) { 
    super.init(nibName: nil, bundle: nil) 

    modalPresentationStyle = .popover 
    guard let pop = popoverPresentationController else { return } 
    pop.sourceView = sender 
    pop.sourceRect = sender.bounds 
    pop.delegate = self 
} 
+0

ich versucht hatte, das zu tun, sondern resultierten in nil Problem verweisen https://stackoverflow.com/questions/44666281/popoverpresentationcontroller-coming-as-nil/44668202#44668202 – Ekra

+0

Ich meine, Sie bewegen 'vorhanden (filterVC, animiert: true, completion: nil) 'nach dem set' pop.delegate'. Hast du das versucht? Sie können meine bearbeitete Antwort überprüfen. – Lawliet