2015-09-10 2 views
0

Здравствуйте, я новичок в написании кода на языке быстрого доступа, и я искал информацию о том, как это сделать, и я не нашел никакого примера. Помогите мне решить мою дилемму. Если кто-то знает, как мне помочь, ответьте.Множественная функция просмотра и выполнения функции swick

Я работаю с двумя контроллерами представления: На первом контроллере view (1) У меня есть метка с именем приложения и под ней я разместил две кнопки.

English и другие, что говорит Spanish. (Я подключил каждую кнопку с помощью segue на раскадровке ко второму диспетчеру просмотра, у которого есть собственный файл с быстрым движением cocoatouch)

На втором контроллере представления у меня есть одна метка. (LabelA) Я поместил две функции в файл.

func englishone(){ 
    labelA.text = "Welcome" } 

func spanishone(){ 
    labelA.text = "Bienvenido"} 

Я хочу FUNC englishone выполнить на secondviewcontroler, когда я нажимаю кнопку английского на первом ViewController и выполнить Func spanishone при нажатии на кнопку испанский.

Единственное решение, с которым я мог работать, это создать третий контроллер представления. SecondViewController является английской функцией, а ThirdViewController - испанской функцией. Но с этим решением, если я создам любые новые языковые кнопки в первом Viewcontroller, мне пришлось бы создать такое же количество дополнительных контроллеров view. (Это не было бы эффективной конструкцией или тактикой кодирования.)

Я считаю, что я должен использовать оператор if на втором контролере, который проверяет, нажата ли кнопка на английском или нажата ли кнопка на испанском. Однако я не совсем уверен, как это сделать.

Пожалуйста, помогите мне.

ответ

0

С вашего первого контроллера точки зрения вы можете реализовать метод prepareForSegue(_:sender:).

Вы должны добавить идентификаторы segue во все ваши segues в раскадровке, а в методе prepareForSegue(_:sender:) вы должны попросить sender.identifier, чтобы проверить, не нажал ли он на испанский, английский или другой язык.

Затем на вашем втором контроллере просмотра вы должны добавить var, который содержит язык, который вы используете. Вы будете использовать этот var, чтобы определить, какой метод вы собираетесь выполнять.

Таким образом, ваш второй контроллер представления необходимо добавить перечисление с доступными языками и имеют вар для сохранения выбранного языка:

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

var language : AvailableLanguages! 

С первого контроллера представления, вы должны установить контроллер представления вашего секундного var value в методе 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

+0

Спасибо LucasIt89, хотя я не уверен, что вы меня подразумеваете, добавив индикатор флага на втором контролере. Можете ли вы показать мне, что вы имеете в виду? –

+0

И что мне делать, если я добавлю две новые кнопки на французский и немецкий языки? В примере, который вы дали мне, если я не ошибаюсь, вы используете bool (true/false), который не будет работать с большим количеством параметров. Как мне это сделать? –

+0

Я отредактировал свой ответ, чтобы добавить поддержку нескольким языкам и объяснил, как добиться этого. Если вы пытаетесь поддерживать несколько языков, я рекомендую не следовать этому подходу, но использовать инструменты интернационализации в Xcode, поэтому вам не нужно делать это для всех ваших контроллеров представлений. – lucaslt89

Смежные вопросы