在swift中向下滑动时搜索栏

时间:2014-10-31 10:01:07

标签: swift uinavigationcontroller storyboard uisearchbar

我正在为 iOS

开发社交媒体应用

我的ViewControllers目前已嵌入NavigationController。 在我的新闻提要屏幕上,我需要在用户向下滑动时显示搜索栏(并在他向上滑动时隐藏它),其中如果用户输入内容,搜索结果将显示在新闻提要屏幕的顶部。

我试图修补此问题,但我对iOS很陌生,到目前为止还没有成功实现这一点。

任何帮助都会受到赞赏,请记住,我只对iOS进行了几周的编程,因此深入一些会有所帮助。 谢谢!

1 个答案:

答案 0 :(得分:3)

首先,您需要实施UISwipeGestureRecognizer

setup()

中加入viewDidAppear功能
func setup() {
    let swipeDown = UISwipeGestureRecognizer(target: self, action: #selector(down))
    swipeDown.direction = .down
    let swipeUp = UISwipeGestureRecognizer(target: self, action: #selector(up))
    swipeUp.direction = .up

    self.view.addGestureRecognizer(swipeDown)
    self.view.addGestureRecognizer(swipeUp)

    searchBar = UISearchBar(frame: CGRect(x: 0.0, y: 0.0, width: self.view.frame.size.width, height: 40.0))
    if let searchBar = searchBar
    {
        searchBar.backgroundColor = UIColor.red
        self.view.addSubview(searchBar)
    }
}

然后你的两个功能上下

func down(sender: UIGestureRecognizer) {
    print("down")
    //show bar
    UIView.animate(withDuration: 1.0, animations: { () -> Void in
        self.searchBar!.frame = CGRect(x: 0.0, y: 64.0, width: self.view.frame.width, height: 40.0)
    }, completion: { (Bool) -> Void in
    })
}

func up(sender: UIGestureRecognizer) {
    print("up")
    UIView.animate(withDuration: 1.0, animations: { () -> Void in
        self.searchBar!.frame = CGRect(x: 0.0, y: 0.0, width: self.view.frame.width, height: 40.0)
    }, completion: { (Bool) -> Void in
    })
}

您可以添加Bool isShowing以避免不必要的动画。然后,实施搜索栏代理textDidChange以在用户键入时更改搜索结果。

func searchBar(_ searchBar: UISearchBar,textDidChange searchText: String)`

您现在需要做的只是在UISearchController

中显示结果

注意 使用向上/向下滑动操作可能会干扰UIScreachController

的滚动