ios - 在 iOS 中模拟标签栏

标签 ios swift

我在一个 View Controller 中有很多 View 在另一个之上,我正在尝试模拟一个标签栏。用户可以点击菜单的任何按钮,将根据点击的按钮显示 View 。所有其他 View 都将隐藏。

我编写了以下代码,它没有正确显示 View (有时显示,有时不显示)。

presentViewWithName(.home) // this will present the view at the very bottom of the hierarchy

enum Views {
    case home
    case sketchpad
    case help
    case settings
}

func presentViewWithName(name: Views) {
    self.turnAlphaOnToEveryMenuButton()
    switch name {
    case .home:
        self.hideAllViews()
        self.menuView.buttonHome.dimmerAlpha()
    case .sketchpad:
        self.sketchpadView.animateToggleAlpha()
        self.menuView.buttonSketchpad.dimmerAlpha()
    case .help:
        self.helpView.animateToggleAlpha()
        self.menuView.buttonHelp.dimmerAlpha()
    case .settings:
        self.settingsView.animateToggleAlpha()
        self.menuView.buttonSettings.dimmerAlpha()
    }
}

func turnAlphaOnToEveryMenuButton() {
    self.menuView.buttonHome.alpha = 1
    self.menuView.buttonSketchpad.alpha = 1
    self.menuView.buttonHelp.alpha = 1
    self.menuView.buttonSettings.alpha = 1
}

func hideAllViews() {
    self.settingsView.alpha = 0
    self.sketchpadView.alpha = 0
    self.helpView.alpha = 0
}

extension UIView {
    func animateToggleAlpha() {
        UIView.animateWithDuration(0.25) {
            self.alpha = self.alpha == 1 ? 0 : 1
        }
    }

    func dimmerAlpha() {
        UIView.animateWithDuration(0.25) {
            self.alpha = self.alpha == 1 ? 0.4 : 1
        }
    }
}

我基本上是在更改 View 的 alpha。假设您想展示主视图。这是层次结构最底部的 View 。我只是隐藏所有 View 。假设我想在层次结构的最顶层显示 View ,即设置 View 。我隐藏所有 View ,然后显示设置 View 。

我该如何解决/更好地解决这个问题?

最佳答案

应该有主页、画板、帮助和设置4个 View 。您所有的 View 都应该具有相同的 super View 。它应该分别连接到与主页、画板、帮助和设置相同的导出菜单 View ,

@IBOutlet weak var menuViews: [UIView]! 

这是你的枚举,

enum Views {
   case home
   case sketchpad
   case help
   case settings
}

添加函数以显示该 View ,

func presentViewWithName(name: Views) {
    UIView.animateWithDuration(0.25) {
       for (index, view) in menuViews.enumerate() {
          let  alpha = (name == (Views(rawValue: index)!)) ? 1.0 : 0.0
          view.alpha = alpha
       }
    }
}

关于ios - 在 iOS 中模拟标签栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38162197/

相关文章:

ios - 无法在 Swift 3/Xcode 8.2.1 中导入 EventKit

swift - 两个 Date 对象之间的所有日期 (Swift)

ios - 我们可以从 iOS 应用程序加载外部包吗?

ios - 表格单元格中显示长文本标签,但如何在 Swift 中的第二行添加边距?

ios - swift/iOS : How to use inout parameters in functions with AnyObject/Any or Pointers

ios - 滚动 UITableView 时如何创建 NSLayoutConstraint

ios - Core Text在iOS中计算字母框架

ios - 未在模拟器上调用 UI 自动化 onAlert 方法

ios - Cocoapods:cocoapods(0.28.0) 管理 3rdparty 库问题

ios - 如何在 iOS 中检查图像是否黑白