Как передать данные в выбранной ячейке в другой контроллер представления? - PullRequest
0 голосов
/ 03 декабря 2018

Часть кода, приведенная ниже, печатает содержимое любой ячейки, по которой щелкают в моем TableView.

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)  {
    print(self.cell[indexPath.row])
}

Я хочу использовать результат, который напечатан в метке на другом ViewController.

Как мне получить строковое значение из функции и затем использовать его в другом представлении?Моя мысль - использовать глобальную переменную, но сначала мне нужно вывести строковое значение.

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Например, Вы можете использовать простую организацию синглтона другого ViewController (SecondScreen) с var main (в случае, как обычно, когда SecondScreen инициируется через раскадровку):

class SecondScreen : UIViewController {
    // 1. add this var
    static var main : SecondScreen? = nil

    // 2. Your some UI element
    @IBOutlet weak var textButton: UIButton!

    // 3. add this method
    func updateUI(string : String) {
        textButton.setTitle(string, for: .normal)
    }

    // 4. setting a var
    override func viewDidLoad() {
        if SecondScreen.main == nil {
            SecondScreen.main = self
        }
    }

    // ... another your and standard methods
}

И вы можете обновить свой SecondScreen следующим образом:

    let v = SecondScreen.main
    v?.updateUI(string: "yourString")

Также я рекомендую вам вызвать метод async:

DispatchQueue.main.async {
    SecondScreen.main?.updateUI(withString : string)
}

Я предлагаю вам изучитьподробнее о синглетонах ...

0 голосов
/ 03 декабря 2018

Сначала, когда вы создаете tableView, вы должны собирать данные ( строка здесь) ячеек в массив или другой сбор данных.И вы можете получить необходимые данные ( строки ) с помощью переменной indexPath в методе didSelectRowAt.И вы можете передать строку другому ViewController (пусть используйте SecondViewController) несколькими способами.

Вот пример:

// declaration an array of your strings
var array : [String] = ["First", "Second", "Third", ...]
...
// getting a string from method:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)  {
let string = array[indexPath.row]
print(string)
// next, for example, you need to pass the string to a singleton SecondViewController with static var **main**:
SecondViewController.main?.neededString = string
}

Не делайтене забудьте обновить в async DispatchQueue:

DispatchQueue.main.async {
    SecondViewController.main?.updateUI(withString : string)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...