2017-06-22 54 views
2

我想要一个小的UItableView,当点击时弹出,并在列表中显示一些数字。下拉列表ios swift

我试过使用popoverPresentationController,但它对iOS(iPhone)设备显示全屏。

下面

为相同的代码 - 下面方法还

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

// -----

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 

// -------

正确的方向任何提示将不胜感激。 工作的样品将是很大的帮助

我想实现如下

dropdwon 1

dropdown 2

回答

1

UPDATE

有一个有用的library你可能想给一试。


这是因为你的pop.delegate分配你目前的filterVC后。

移动这个

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

filterVC的初始化应该做的伎俩。顺便说一句,我没有看到你为popoverPresentationController分配了sourceViewsourceRect的任何地方。将pop.delegate = self移动到这个部分应该是合适的。像

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

我曾试图这样做,但结果变成零问题的东西是指https://stackoverflow.com/questions/44666281/popoverpresentationcontroller-coming-as-nil/44668202#44668202 – Ekra

+0

我的意思是你移动'本(filterVC,animated:true,completion:nil)'设置为'pop.delegate'之后。你试过这个吗?你可以检查我编辑的答案。 – Lawliet