多个视图控制器 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?