Выберите состояние в средстве выбора вида, перейдите на новый экран

Я кодирую приложение в XCode с помощью Swift, и в настоящее время у меня есть средство выбора списка в приложении. Я хочу, чтобы пользователь мог выбрать состояние из окна выбора, которое перенесет их на новый экран (предназначенный для этого конкретного состояния).

Пользовательский интерфейс:

введите здесь описание изображения


person B. Myles    schedule 31.08.2016    source источник


Ответы (2)


МЕТОД 1:

ПРИМЕЧАНИЕ. Это следует использовать, если у вас есть один контроллер представления, который необходимо настроить...


Попробуйте это:

ШАГ 1. Добавьте в свой View Controller эту переменную:

var chosenState = String()

ШАГ 2. Добавьте эту функцию в View Controller:

override func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int){
chosenState = yourPickerData[row] // yourPickerData = your state array
}

ШАГ 3. Если у вас есть переход, связанный с кнопкой, удалите его. Сделайте следующие вещи на раскадровке:

введите здесь описание изображения

введите здесь описание изображения

Выберите Показать соединение, щелкните переход и установите его идентификатор на customSegue, как на картинке выше.

ШАГ 4. Внутри функции кнопки продолжить в контроллере представления добавьте следующее:

self.performSegueWithIdentifier("customSegue", sender: nil)

ШАГ 5. Добавьте метод prepareForSegue в свой ViewController:

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "customSegue" {
            if let secondViewController = segue.destinationViewController as? secondViewController {
                secondViewController.customLabel.text = self.chosenState
// this is an example, but the view will contain the name of the chosen state by the time the button gets clicked... You can customize it...
            }
        }
    }

Надеюсь это поможет! Дайте мне знать, что вы думаете!

МЕТОД 2:

ПРИМЕЧАНИЕ. Это следует использовать, если вы создали больше View Controllers в раскадровке.


Попробуйте это:

ИНТЕРФЕЙС:

ШАГ 1. Перейдите к Storyboard и добавьте кнопку на сцену под pickerView, как показано на изображении ниже, и убедитесь, что класс вашего View Controller действительно установлен на ViewController.swift: < a href="https://i.stack.imgur.com/uj5TZ.png" rel="nofollow noreferrer">введите описание изображения здесь

ШАГ 2: откройте Assistant Editor и подключите кнопку, нажав Ctrl+Щелкните и перетащите к ViewController.swift, как показано ниже:

введите здесь описание изображения введите здесь описание изображения

Тип подключения: Действие, назовите его как хотите. После подключения появится вот это:

@IBAction func continueButtonPressed(sender: AnyObject?){
//this is your continue button function
}

ПРИМЕЧАНИЕ. В учебных целях я буду работать только с тремя штатами!

ШАГ 3: перетащите три файла View Controllers (или столько, сколько хотите) на сцену, а затем добавьте в проект три (или столько, сколько хотите) файлов swift с именем StateName View Controller. Добавьте к ним этот код:

import UIKit

    class StateNameViewController: UIViewController{

    }

1: введите здесь описание изображения 2: введите здесь описание изображения 3: введите здесь описание изображения 4: введите здесь описание изображения

ШАГ 4. Назначьте их классы следующим образом:

Выберите первый ViewController на storyboard, перейдите в Инспектор удостоверений и установите для него класс AlabamaViewController. И так к другим 2.

ШАГ 5. Затем создайте переход для каждого из них и задайте для его идентификатора значение State Name Segue, например:

Как это сделать для первого: введите здесь описание изображения Остальные 2: введите здесь описание изображения

ШАГ 6. Соедините pickerView с кодом следующим образом:

введите здесь описание изображения

КОД:

ШАГ 7. Перейдите в свой ViewController и добавьте следующее:

class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {


    @IBOutlet weak var pickerView: UIPickerView!

    var pickerData = ["Alabama","Alaska","Kansas"]
    var chosenState = ""

    override func viewDidLoad() {
        super.viewDidLoad()

        pickerView.delegate = self
        pickerView.dataSource = self
        // Do any additional setup after loading the view, typically from a nib.
    }

ШАГ 8. В InsideViewController.swift добавьте следующие функции:

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return pickerData.count
    }

    // The data to return for the row and component (column) that's being passed in
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return pickerData[row]
    }

    //Called when the user changes the selection...
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        chosenState = pickerData[row]
    }

    func numberOfComponents(in pickerView: UIPickerView) -> Int {

    return 1
    }

ШАГ 9. Функция кнопки с добавленным кодом:

@IBAction func continueButtonPressed(_ sender: AnyObject) {
     self.performSegue(withIdentifier: "\(chosenState)Segue", sender: nil)

}

ПРЕДВАРИТЕЛЬНЫЙ ПРОСМОТР – СПОСОБ 2:

ViewController.swift в конце:

import UIKit

class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {


    @IBOutlet weak var pickerView: UIPickerView!

    var pickerData = ["Alabama","Alaska","Kansas"]
    var chosenState = ""

    override func viewDidLoad() {
        super.viewDidLoad()

        pickerView.delegate = self
        pickerView.dataSource = self
        // Do any additional setup after loading the view, typically from a nib.
    }

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

    @IBAction func continueButtonPressed(_ sender: AnyObject) {
         self.performSegue(withIdentifier: "\(chosenState)Segue", sender: nil)

    }


    // The number of columns of data


    // The number of rows of data
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return pickerData.count
    }

    // The data to return for the row and component (column) that's being passed in
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return pickerData[row]
    }
    //Called when the user changes the selection...
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        chosenState = pickerData[row]
    }

    func numberOfComponents(in pickerView: UIPickerView) -> Int {

    return 1
    }


}

Это оно! Скажи мне, если это поможет!

person Mr. Xcoder    schedule 31.08.2016
comment
Большое спасибо за вашу помощь. У меня все еще возникают проблемы на третьем шаге второго метода. Это звучит глупо, но я не думаю, что у меня есть функция кнопки «Продолжить», и я не знаю, как ее написать? - person B. Myles; 01.09.2016
comment
@B.Myles Я обновил ответ. Пожалуйста, дайте мне знать, если это эффективно для вас. Для меня это работает просто идеально. ПРИМЕЧАНИЕ. Пожалуйста, сделайте то, что я говорю для одного из методов, шаг за шагом от начала до конца, потому что, если вы этого не сделаете, вам, возможно, придется начать все сначала... - person Mr. Xcoder; 01.09.2016
comment
Я настоятельно рекомендую метод 1, потому что работа выполняется программно только с одним ViewController. Но если вы новичок, способ 2 поможет вам начать. Примечание. Для метода 2 требуется столько VC-s, сколько содержится в вашем массиве состояний... - person Mr. Xcoder; 01.09.2016
comment
Если это поможет, не забудьте нажать эту кнопку проверки выше - person Mr. Xcoder; 01.09.2016
comment
Я продолжаю получать сообщение об ошибке, когда пытаюсь ввести self.performSegue(withIdentifier: (chosenState)Segue, sender: nil) в функцию кнопки. Ошибка говорит, что значение типа «ViewController» не имеет члена в «performanceSegue». Еще раз спасибо за вашу помощь. - person B. Myles; 01.09.2016
comment
это потому, что вы написали performanceSegue вместо PerformSegue - person Mr. Xcoder; 01.09.2016
comment
Я не понимаю, где я написал performanceSegue вместо PerformSegue? - person B. Myles; 02.09.2016
comment
в функции кнопки «Продолжить» - person Mr. Xcoder; 02.09.2016
comment
Это код, который у меня сейчас есть в функции кнопки «Продолжить»: @IBAction func continueButtonPressed(sender: AnyObject) { self.performSegue(withIdentifier: (chosenState)Segue, sender: nil)} - person B. Myles; 02.09.2016

Хорошо, во-первых, я надеюсь, что у вас есть кнопка «Продолжить» после того, как пользователь выберет состояние, потому что, если вы этого не сделаете, вы можете вызвать разочарование у пользователя, передумавшего о выбранном состоянии, в любом случае, вы можете поймать выбранное состояние с помощью функции pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) , при этом вы получите выбранную строку, с помощью которой вы можете использовать ее в качестве переменной для определения следующего контроллера представления в кнопке продолжения, с переключателем или чем-то вроде этого switch selectedIndex{ case 0: performSegueWithIdentifier("Segue1", self) default: print("No valid index selected") }

person Luis Perez    schedule 31.08.2016