多个视图控制器 segue 并快速执行功能

Posted

技术标签:

【中文标题】多个视图控制器 segue 并快速执行功能【英文标题】:Multiple viewcontroller segue and execute function swift 【发布时间】:2015-09-10 00:55:09 【问题描述】:

您好,我是在 swift 上编写代码的新手,我一直在互联网上寻找如何做到这一点,但我没有找到任何示例来帮助我解决我的困境。如果有人知道如何帮助我,请回复。

我正在使用两个视图控制器: 在第一个 viewcontroller(1) 上,我有一个带有应用名称的标签,在它下面我放置了两个按钮。

一个说英语,另一个说西班牙语。 (我已将故事板上的每个按钮与 segue 连接到第二个具有自己的 cocoatouch swift 文件的视图控制器)

在第二个视图控制器上,我有一个标签。 (标签A) 我在文件中放置了两个函数。

 func englishone ()
  labelA.text = "Welcome" 

 func spanishone ()
   labelA.text = "Bienvenido" 

我希望 func englishone 在我按下第一个 ViewController 上的英语按钮时在 secondviewcontroler 上执行,并在我按下西班牙语按钮时执行 func spanishone。

我能够使用的唯一解决方案是创建第三个视图控制器。 SecondViewController 是英语函数一,ThirdViewController 是西班牙语函数一。但是使用这个解决方案,如果我在第一个 Viewcontroller 中创建任何新的语言按钮,我将不得不创建相同数量的额外 viewcontrollers。 (这既不是有效的设计,也不是编码策略。)

我认为我应该在 secondeviewController 上使用 if 语句,检查是否按下了英语按钮或按下了西班牙语按钮。但是我不太确定该怎么做。

请帮助我。

【问题讨论】:

【参考方案1】:

从您的第一个视图控制器,您可以实现 prepareForSegue(_:sender:) 方法。

您必须为情节提要中的所有转场添加转场标识符,并且在 prepareForSegue(_:sender:) 方法中,您应该请求 sender.identifier 以检查它是否推送到西班牙语、英语或其他语言。

然后,在您的第二个视图控制器中,您必须添加一个变量来保存您正在使用的语言。您将使用该 var 来定义要执行的方法。

因此,您的第二个视图控制器需要添加一个包含可用语言的枚举,并有一个 var 来存储所选语言:

enum AvailableLanguages: Int 
    case Spanish
    case English
    case German
    case French


var language : AvailableLanguages!

从您的第一个视图控制器,您应该在prepareForSegue(_:sender:) 方法中设置第二个视图控制器的变量值,并使用segue.destinationViewController 属性访问它。这就是您的 prepareForSegue 方法的外观:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
    switch segue.identifier! 
    case "englishSegue": (segue.destinationViewController as! LoginViewController).language = .English
    case "spanishSegue": (segue.destinationViewController as! LoginViewController).language = .Spanish
    case "frenchSegue": (segue.destinationViewController as! LoginViewController).language = .French
    case "germanSegue": (segue.destinationViewController as! LoginViewController).language = .German
    default: (segue.destinationViewController as! LoginViewController).language = .English //Or your default language
    

最后,一旦你的第二个视图控制器出现,你应该读取var的值来选择要执行的方法:

switch segue.identifier! 
    case "englishSegue": englishone()
    case "spanishSegue": spanishone()
    case "frenchSegue": frenchone()
    case "germanSegue": germanone()
    default: englishone() //Or your default language

我认为这是一个练习项目,但如果它是一个真正的项目,支持多种语言的正确方法是使用 ios 的国际化。阅读此文档以了解如何国际化您的应用程序:Apple Internationalization Doc

【讨论】:

感谢 LucasIt89,虽然我不确定在 secondviewcontroller 上添加标志指示器是什么意思。你能告诉我你的意思吗? 另外,如果我添加两个新按钮法语和德语我会怎么做?在您给我的示例中,如果我没记错的话,您使用的布尔值(真/假)不适用于更多选项。我该怎么做? 我编辑了我的答案以添加对不止一种语言的支持,并详细解释了如何实现它。如果您想要支持多种语言,我建议不要遵循这种方法,而是使用 Xcode 中的国际化工具,因此您不需要为所有视图控制器都这样做。 感谢您回答我的问题 LucasIt89,其实它是一个问答游戏。

以上是关于多个视图控制器 segue 并快速执行功能的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 AlertView 切换到另一个 ViewController 并执行 segue?

如何使 segue 等待功能在按钮按下时完成?

在多个故事板环境中展开 segue

在视图控制器之间有很多segues可以吗?

如何从一个 viewController 添加多个 segue

关闭模态视图控制器,然后执行 segue