Перейдите на один и тот же экран, но из двух разных viewcontroller - PullRequest
0 голосов
/ 17 января 2019

Так у меня 3 ВК

ViewController1,ViewController2,ViewController3

Теперь у меня есть кнопка в ViewController2 и ViewController3, которая при нажатии переходит к ViewController1 есть небольшое изменение в интерфейсе пользователя при переходе с vc2 и с vc3.

Итак, я хочу знать лучшие практики решения этой проблемы, т.е. откуда мне знать, с какого виртуального канала я достиг VC1.?

Ответы [ 3 ]

0 голосов
/ 17 января 2019

В вашем VC1 создайте переменную как vcNames.

class VC1: UIViewController {
        var vcNames = ""
 override func viewDidLoad() {
        super.viewDidLoad()
        //Check your vc's with vcNames.
   }
}

Теперь, нажимая vc1 из VC2 или VC3, просто передайте текущее имя vc с созданной переменной.

 let tempVC1 = UIStoryboard.init(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "VC1") as? VC1
 tempVC1?.vcNames =  "vc2" //Assign your vc name here
 self.navigationController?.pushViewController(tempVC1!, animated: true)
0 голосов
/ 17 января 2019

Добавьте уникальную переменную Bool, чтобы вы могли понять, куда обращаться к этому контроллеру. Сделайте flag false в viewWillAppear, потому что каждый раз, когда он должен обновляться, это самый простой способ, которого вы можете достичь.

class ViewController1: UIViewController {
      var isFromVC2 = false
      var isFromVC3 = false

     override func viewWillAppear(_ animated: Bool) {
         super.viewWillAppear(true)
         isFromVC2 = false
         isFromVC3 = false
     }

}


class ViewController2: UIViewController {


 //You can call this function from where you want otherwise you can make it global.
    func navigateToVC1() {
        let viewController1 = self.storyboard?.instantiateViewController(withIdentifier: "ViewController1") as! ViewController1
        viewController1.isFromVC2 = true
        self.navigationController?.pushViewController(viewController1, animated: true)
    }


}

class ViewController3: UIViewController {

    func navigateToVC1() {
        let viewController1 = self.storyboard?.instantiateViewController(withIdentifier: "ViewController1") as! ViewController1
        viewController1.isFromVC3 = true
        self.navigationController?.pushViewController(viewController1, animated: true)
    }

}
0 голосов
/ 17 января 2019

Вы можете использовать флаг или перечисление.Я предлагаю для enum bcz иногда в будущем вы можете перейти с нескольких контроллеров на VC1.Всегда удобно использовать перечисление.

  1. С флагом
class ViewController1: UIViewController {
    // default value is false bcz if you forgot to assign this value then atleast your app won't crash.
    var isFromVC2 : Bool = false
        :
        :
}
  • Использование -> В вашем файле VC1

    if isFromVC2 {
        // Do code for VC2
    }
    else {
        // Do code for VC3
    }
    
С Enum
enum ComingFrom {
    case VC3
    case VC2
}

class ViewController: UIViewController {
    // default value VC2
    var whichController : ComingFrom = .VC2
      :
      :
}
  • Использование

    switch whichController {
        case .VC2:
            // for vc2 Code
        case .VC3:
            // for VC3 Code
        default:
            // If you forget to assign `whichController` or there will be new condition in future
    }
    

Редактировать: Как назначитьwhichController

let vc = self.storyboard?.instantiateViewController(withIdentifier: "ViewController1") as! ViewController1
vc.whichController = .VC2
self.navigationController?.pushViewController(vc, animated: true)
  • для большей ясности

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...