Строка Eureka для представления контроллера представления и возвращаемого значения в Swift 3.0

Я ищу помощь в выяснении того, как строка в MultivalueSection представляет контроллер представления со второй формой Eureka и возвращает значение обратно в строку MultivalueSection. Мне удалось получить обычный ButtonRow для нажатия контроллера представления с помощью перехода, но я не могу понять, как не вернуть значение строке в MultivalueSection. Я не уверен, поддерживает ли метод ButtonRow возвращаемые значения или нет, поэтому я начал искать другие решения. Один из них, который я обнаружил, — это использование пользовательской строки презентатора (https://github.com/xmartlabs/Eureka#custom-presenter-rows), но я не понимаю, как это сделать.

Вот одну вещь я нашел, но опять же, я не понимаю, как это все собрать:

Помогите создать простую настраиваемую строку докладчика — https://github.com/xmartlabs/Eureka/issues/716

Может ли кто-нибудь указать мне рабочий образец или помочь мне получить эту настройку?


person Jason    schedule 22.05.2017    source источник
comment
Еще один вариант, который я нашел, - это использовать ButtonRowWithPresent, но я снова не могу понять это.   -  person Jason    schedule 22.05.2017


Ответы (1)


Если вы уже отправляете новый виртуальный канал с переходом, вам может понадобиться реализовать протокол и определить функции для обратной передачи данных.

Вот хорошее руководство по контроллерам навигации, где в конце добавляется протокол.

eg:

Просмотрите один (может быть контроллер представления формы с ButtonRow)

class FormVC: FormViewController , FooViewControllerDelegate{
    var text : String!
    override func viewDidLoad() {
        super.viewDidLoad()

    }

    /// Delegate protocol callback implementation
    func myVCDidFinish(controller: FooViewController, text: String) {
        // Receive the data as a delegate
        self.text = text
        // In this case we also want to finish the view
        controller.navigationController?.popViewController(animated: true)
    }

    /// This represents the prepare for segue mentioned as implemented in the question
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Act upon the segue we want from this VC
        // The string is defined in the storyboard, so it must be exactly the same
        if segue.identifier == "mySegue"{
            // Creating the second VC instance
            let vc = segue.destination as! FooViewController
            // Since this class is now a delegate, setup the delegate
            vc.delegate = self
        }
    }
}

View two (нажатый контроллер View)

protocol FooViewControllerDelegate {
    func myVCDidFinish(controller: FooViewController, text: String)
}

class FooViewController: UIViewController {
    /// Data
    var text : String!

    /// Set up an optional delegate
    var delegate:FooViewControllerDelegate? = nil

    override func viewDidLoad() {
        super.viewDidLoad()
        // Init label
        self.text = "Pushed view data to pass back
    }
}
person Efren    schedule 29.05.2017
comment
Добавление ответа снова, так как он был удален. Пожалуйста, примите ответ, если он решил проблему в ОП. - person Efren; 29.05.2017