Swift - 选定按钮下的水平条

问题描述:

我想在菜单上的选定按钮下添加一个白色水平条。就像YouTube应用程序一样。 This is my menuSwift - 选定按钮下的水平条

Abd this is Youtube

我搜索的信息,但我无法找到这事。这是我的代码。谢谢

import UIKit 

class TabViewController: UIViewController { 


    @IBOutlet var contentView: UIView! 
    @IBOutlet var buttons: [UIButton]! 

    var rifleViewController: UIViewController! 
    var pistolViewController: UIViewController! 
    var shotgunViewController: UIViewController! 
    var smgsViewController: UIViewController! 
    var sniperViewController: UIViewController! 

    var viewControllers: [UIViewController]! 
    var selectedIndex: Int = 0 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let storyboard = UIStoryboard(name: "Main", bundle: nil) 

     rifleViewController = storyboard.instantiateViewController(withIdentifier: "rifles") 
     sniperViewController = storyboard.instantiateViewController(withIdentifier: "snipers") 
     smgsViewController = storyboard.instantiateViewController(withIdentifier: "smgss") 
     shotgunViewController = storyboard.instantiateViewController(withIdentifier: "shotguns") 
     pistolViewController = storyboard.instantiateViewController(withIdentifier: "pistols") 
     viewControllers = [rifleViewController, 
          pistolViewController, 
          shotgunViewController, 
          smgsViewController, 
          sniperViewController] 

     buttons[selectedIndex].isSelected = true 
     didPressTab(buttons[selectedIndex]) 


    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


    @IBAction func didPressTab(_ sender: UIButton) { 

     let previousIndex = selectedIndex 

     selectedIndex = sender.tag 

     buttons[previousIndex].isSelected = false 
     let previousVC = viewControllers[previousIndex] 

     previousVC.willMove(toParentViewController: nil) 
     previousVC.view.removeFromSuperview() 
     previousVC.removeFromParentViewController() 

     sender.isSelected = true 

     let vc = viewControllers[selectedIndex] 

     addChildViewController(vc) 

     vc.view.frame = contentView.bounds 
     contentView.addSubview(vc.view) 
     vc.didMove(toParentViewController: self) 

    } 

} 

你可以用简单的动画来实现这一点。 在我的示例 - 应用程序中,我在故事板的屏幕顶部添加了一个视图,并在其上放置了四个按钮。然后我将按钮连接到名为“buttonTapped”的函数(重要的是:你需要在这里包含发件人)。 代码相当简单:

class ViewController: UIViewController { 

@IBOutlet weak var backgroundView: UIView! 
var movingView = UIView() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let screenWidth = UIScreen.main.bounds.width 

    movingView = UIView(frame: CGRect(x: 0, y: 55, width: screenWidth/4, height: 5)) 
    movingView.backgroundColor = UIColor.white //if backgroundView's color is black 
    backgroundView.addSubview(movingView) 
} 


@IBAction func buttonTapped(_ sender: UIButton) 
{ 
    let newx = sender.frame.origin.x 

    UIView.animate(withDuration: 1) { 
     self.movingView.frame.origin.x = newx 
    } 
} 
} 
+0

不,这是一个普通的UIView黑色背景。我把按钮放在这个视图里面。 – Jordan

+0

非常感谢!我做到了,看起来很棒! –

+0

是的,我明白了。对于那个很抱歉。这是一个愚蠢的问题:) –