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

Я новичок в Swift и Xcode. Я создаю приложение Financial Expense ios.

В моем первом контроллере представления я создал ссылку на метку с именем costNum.

Во втором контроллере просмотра у меня есть функция для кнопки под названием «Добавить расход». Когда она нажата, мне нужно обновить переменную costNum с суммой расходов.

Как лучше всего это сделать? Я создал объект первого класса контроллера представления и получил к нему доступ как «firstviewcontroller.expenseNum», но это создаст новый экземпляр класса, и мне нужно, чтобы он был одним и тем же экземпляром, чтобы он мог непрерывно добавляться к одной и той же переменной. Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Существует несколько способов передачи данных из ViewController2 в другую ViewController1

Лучший способ здесь - Делегаты протокола

Пожалуйста, выполните следующие шаги для передачи данных

В вашем SecondViewController откуда вы хотите отправить данные обратно объявите протокол вверху объявления класса

protocol SendDataBack: class {
    func sendDataFromSecondVCtoFirstVC(myValue: String)
}

Теперь в class, объявите объект вашего протокола в том же ViewController

weak var myDelegateObj: SendDataBack?

А теперь в вашем действии кнопки Добавить расход просто вызовите метод делегата

myDelegateObj?.sendDataFromSecondVCtoFirstVC(myValue: yourValue)

Теперь перейдите к первому ViewController

место, откуда вы нажали / представили SecondViewController, вы, должно быть, взяли объект SecondVC для нажатия, чтобы нажать от первого

if let secondVC = (UIStoryboard.init(name: "Main", bundle: nil)).instantiateViewController(withIdentifier: "secondVCID") as? SecondViewController {
        vc?.myDelegateObj = self

 self.navigationController?.pushViewController(secondVC, animated: true) 
**OR**
        self.present(secondVC, animated: true, completion: nil)
        }

теперь в вашем FirstViewController сделайте расширение FirstViewVC

extension FirstViewController: SendDataBack {
    func sendDataFromSecondVCtoFirstVC(myValue: String) {

    }
}
0 голосов
/ 02 мая 2018

Вам нужен делегат

 protocol SendManager {
    func send(str:String)
 }

Во первых

class FirstVc:UIViewcontroller , SendManager {

      func send(str:string) {
        self.expenseNum.text = str
     }

}

когда вы представляете SecondVc

let sec = SecondVc()

sec.delegate = self

// настоящее время

В секунду

class SecondVc:UIViewcontroller {

   var delegate:SendManager?

   @IBAction func btnClicked(_ sender:UIButton) {

      delegate?.send(str:"value")

  }
}

// настройка делегата

in viewDidLoad SecondVc

if let first = self.tabBarController.viewControllers[0] as? FirstVc {
   self.delegate = first
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...