快速下拉列表 [英] Dropdown list in swift

查看:19
本文介绍了快速下拉列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一个 iPhone 应用程序,该应用程序在单击栏按钮时出现的导航栏下方有一个过滤器列表(下拉列表).请建议我该怎么做.

I am working on an iPhone app that has a filter list (dropdown list) under the navigation bar that appears when I click on the bar button. Please suggest me how can I do it.

推荐答案

有很多方法可以做到,我的建议类似于以下内容:

There are a number ways to do it, my suggestions would be something similar to as follows:

当您初始化视图控制器时,您的下拉视图会偏移并隐藏在导航栏后面.使用布局约束或使用视图的框架执行此操作,具体取决于您的首选设置.

When you initialise the view controller, your dropdown view is offset and hidden behind the navigation bar. Do this either with Layout Constraints or using the view's frame, depending on your preferred set up.

var isAnimating: Bool = false
var dropDownViewIsDisplayed: Bool = false

func viewDidLoad() {
    super.viewDidLoad()
    let height: CGFloat = self.dropDownView.frame.size.height
    let width: CGFloat = self.dropDownView.frame.size.width
    self.dropDownView.frame = CGRectMake(0, -height, width, height)
    self.dropDownViewIsDisplayed = false
}

然后将一个动作链接到 BarButtonItem,当按下时,显示视图(如果隐藏)或隐藏(如果使用动画可见).

Then link up an action to the BarButtonItem that, when pressed, displays the view if hidden or hides if visible using an animation.

@IBAction func barButtonItemPressed(sender: UIBarButtonItem?) {
    if (self.dropDownViewIsDisplayed) {
        self.hideDropDownView()
    } else {
        self.showDropDownView()
    }
}

func hideDropDownView() {
     var frame: CGRect = self.dropDownView.frame
     frame.origin.y = -frame.size.height
     self.animateDropDownToFrame(frame) {
         self.dropDownViewIsDisplayed = false
     }
}

func showDropDownView() {
    CGRect frame = self.dropDownView.frame
    frame.origin.y = self.navigationBar.frame.size.height
    self.animateDropDownToFrame(frame) {
        self.dropDownViewIsDisplayed = true
    }
}

func animateDropDownToFrame(frame: CGRect, completion:() -> Void) {
    if (!self.animating) {
        self.animating = true
        UIView.animateWithDuration(0.5, delay: 0.0, options: .CurveEaseInOut, animations: { () -> Void in
            self.dropDownView.frame = frame
            }, completion: (completed: Bool) -> Void in {
                self.animating = false
                if (completed) {
                     completion()
                }
            })
    }
}

剩下的就是定义 dropDownView 并正确链接它.

All that is left for you is to define your dropDownView and link it up correctly.

希望对你有帮助,有不明白的地方请评论

I hope that helps, please comment if there is anything you don't understand

这篇关于快速下拉列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆