ios how to change another view controller's content in different view controller in swift











up vote
0
down vote

favorite












I am new to swift and ios developer. And I want to create a side menu that the cell event will dynamically change the content in a container view. But it seems not work.



the left is the tableview(my side menu) and the right is the container view with a viewcontroller(vc2) on it



I try two ways to change background color of the container view



the first is



    func tableView (_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){

let vc2 = storyboard?.instantiateViewController(withIdentifier: "vc2") as? ViewController2

vc2?.view.backgroundColor = UIColor.white

}


and the second way is



    func tableView (_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){

let vc2 = storyboard?.instantiateViewController(withIdentifier: "vc2") as? ViewController2

vc2?.changecolor()


}


and in vc2



func changecolor()
{
print(123)
self.view.backgroundColor = UIColor.purple

}


it will print 123 but not change bg color



How can I change the content in other view controller ? (If I don't want to remove the current container view and change to another one)










share|improve this question






















  • It is the same situation with a segue: when you perform segue, UI elements (as IBOutlets) of destination are not yet set, so you cannot change them. That's why you need to set a property in destination and use this property after loading, or at viewWillAppear or viewDidAppear time.
    – claude31
    Nov 15 at 20:11










  • @claude31 But my vc2 is above the table view.I just push the x position of what above the table view to right.Didn’t the vc2 load already?(I can also click the bar item on it)
    – Jeffese
    Nov 16 at 2:26












  • Don't understand : in didSelectRow, you instantiate the VC2. Why, if it is already there ?
    – claude31
    Nov 17 at 8:05















up vote
0
down vote

favorite












I am new to swift and ios developer. And I want to create a side menu that the cell event will dynamically change the content in a container view. But it seems not work.



the left is the tableview(my side menu) and the right is the container view with a viewcontroller(vc2) on it



I try two ways to change background color of the container view



the first is



    func tableView (_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){

let vc2 = storyboard?.instantiateViewController(withIdentifier: "vc2") as? ViewController2

vc2?.view.backgroundColor = UIColor.white

}


and the second way is



    func tableView (_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){

let vc2 = storyboard?.instantiateViewController(withIdentifier: "vc2") as? ViewController2

vc2?.changecolor()


}


and in vc2



func changecolor()
{
print(123)
self.view.backgroundColor = UIColor.purple

}


it will print 123 but not change bg color



How can I change the content in other view controller ? (If I don't want to remove the current container view and change to another one)










share|improve this question






















  • It is the same situation with a segue: when you perform segue, UI elements (as IBOutlets) of destination are not yet set, so you cannot change them. That's why you need to set a property in destination and use this property after loading, or at viewWillAppear or viewDidAppear time.
    – claude31
    Nov 15 at 20:11










  • @claude31 But my vc2 is above the table view.I just push the x position of what above the table view to right.Didn’t the vc2 load already?(I can also click the bar item on it)
    – Jeffese
    Nov 16 at 2:26












  • Don't understand : in didSelectRow, you instantiate the VC2. Why, if it is already there ?
    – claude31
    Nov 17 at 8:05













up vote
0
down vote

favorite









up vote
0
down vote

favorite











I am new to swift and ios developer. And I want to create a side menu that the cell event will dynamically change the content in a container view. But it seems not work.



the left is the tableview(my side menu) and the right is the container view with a viewcontroller(vc2) on it



I try two ways to change background color of the container view



the first is



    func tableView (_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){

let vc2 = storyboard?.instantiateViewController(withIdentifier: "vc2") as? ViewController2

vc2?.view.backgroundColor = UIColor.white

}


and the second way is



    func tableView (_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){

let vc2 = storyboard?.instantiateViewController(withIdentifier: "vc2") as? ViewController2

vc2?.changecolor()


}


and in vc2



func changecolor()
{
print(123)
self.view.backgroundColor = UIColor.purple

}


it will print 123 but not change bg color



How can I change the content in other view controller ? (If I don't want to remove the current container view and change to another one)










share|improve this question













I am new to swift and ios developer. And I want to create a side menu that the cell event will dynamically change the content in a container view. But it seems not work.



the left is the tableview(my side menu) and the right is the container view with a viewcontroller(vc2) on it



I try two ways to change background color of the container view



the first is



    func tableView (_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){

let vc2 = storyboard?.instantiateViewController(withIdentifier: "vc2") as? ViewController2

vc2?.view.backgroundColor = UIColor.white

}


and the second way is



    func tableView (_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){

let vc2 = storyboard?.instantiateViewController(withIdentifier: "vc2") as? ViewController2

vc2?.changecolor()


}


and in vc2



func changecolor()
{
print(123)
self.view.backgroundColor = UIColor.purple

}


it will print 123 but not change bg color



How can I change the content in other view controller ? (If I don't want to remove the current container view and change to another one)







ios swift






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 15 at 19:22









Jeffese

92




92












  • It is the same situation with a segue: when you perform segue, UI elements (as IBOutlets) of destination are not yet set, so you cannot change them. That's why you need to set a property in destination and use this property after loading, or at viewWillAppear or viewDidAppear time.
    – claude31
    Nov 15 at 20:11










  • @claude31 But my vc2 is above the table view.I just push the x position of what above the table view to right.Didn’t the vc2 load already?(I can also click the bar item on it)
    – Jeffese
    Nov 16 at 2:26












  • Don't understand : in didSelectRow, you instantiate the VC2. Why, if it is already there ?
    – claude31
    Nov 17 at 8:05


















  • It is the same situation with a segue: when you perform segue, UI elements (as IBOutlets) of destination are not yet set, so you cannot change them. That's why you need to set a property in destination and use this property after loading, or at viewWillAppear or viewDidAppear time.
    – claude31
    Nov 15 at 20:11










  • @claude31 But my vc2 is above the table view.I just push the x position of what above the table view to right.Didn’t the vc2 load already?(I can also click the bar item on it)
    – Jeffese
    Nov 16 at 2:26












  • Don't understand : in didSelectRow, you instantiate the VC2. Why, if it is already there ?
    – claude31
    Nov 17 at 8:05
















It is the same situation with a segue: when you perform segue, UI elements (as IBOutlets) of destination are not yet set, so you cannot change them. That's why you need to set a property in destination and use this property after loading, or at viewWillAppear or viewDidAppear time.
– claude31
Nov 15 at 20:11




It is the same situation with a segue: when you perform segue, UI elements (as IBOutlets) of destination are not yet set, so you cannot change them. That's why you need to set a property in destination and use this property after loading, or at viewWillAppear or viewDidAppear time.
– claude31
Nov 15 at 20:11












@claude31 But my vc2 is above the table view.I just push the x position of what above the table view to right.Didn’t the vc2 load already?(I can also click the bar item on it)
– Jeffese
Nov 16 at 2:26






@claude31 But my vc2 is above the table view.I just push the x position of what above the table view to right.Didn’t the vc2 load already?(I can also click the bar item on it)
– Jeffese
Nov 16 at 2:26














Don't understand : in didSelectRow, you instantiate the VC2. Why, if it is already there ?
– claude31
Nov 17 at 8:05




Don't understand : in didSelectRow, you instantiate the VC2. Why, if it is already there ?
– claude31
Nov 17 at 8:05












1 Answer
1






active

oldest

votes

















up vote
0
down vote













func tableView (_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){

let vc2 = storyboard?.instantiateViewController(withIdentifier: "vc2") as? ViewController2

vc2?.setColor(UIColor.purple)


}

class ViewController2: UIViewController {

private(set) var color:UIColor?

override func viewDidLoad() {
guard let color = self.color else { return }
self.view.backgroundColor = color
}

func setColor(_ color:UIColor) {
self.color = color
}
}





share|improve this answer





















    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53326585%2fios-how-to-change-another-view-controllers-content-in-different-view-controller%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    0
    down vote













    func tableView (_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){

    let vc2 = storyboard?.instantiateViewController(withIdentifier: "vc2") as? ViewController2

    vc2?.setColor(UIColor.purple)


    }

    class ViewController2: UIViewController {

    private(set) var color:UIColor?

    override func viewDidLoad() {
    guard let color = self.color else { return }
    self.view.backgroundColor = color
    }

    func setColor(_ color:UIColor) {
    self.color = color
    }
    }





    share|improve this answer

























      up vote
      0
      down vote













      func tableView (_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){

      let vc2 = storyboard?.instantiateViewController(withIdentifier: "vc2") as? ViewController2

      vc2?.setColor(UIColor.purple)


      }

      class ViewController2: UIViewController {

      private(set) var color:UIColor?

      override func viewDidLoad() {
      guard let color = self.color else { return }
      self.view.backgroundColor = color
      }

      func setColor(_ color:UIColor) {
      self.color = color
      }
      }





      share|improve this answer























        up vote
        0
        down vote










        up vote
        0
        down vote









        func tableView (_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){

        let vc2 = storyboard?.instantiateViewController(withIdentifier: "vc2") as? ViewController2

        vc2?.setColor(UIColor.purple)


        }

        class ViewController2: UIViewController {

        private(set) var color:UIColor?

        override func viewDidLoad() {
        guard let color = self.color else { return }
        self.view.backgroundColor = color
        }

        func setColor(_ color:UIColor) {
        self.color = color
        }
        }





        share|improve this answer












        func tableView (_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){

        let vc2 = storyboard?.instantiateViewController(withIdentifier: "vc2") as? ViewController2

        vc2?.setColor(UIColor.purple)


        }

        class ViewController2: UIViewController {

        private(set) var color:UIColor?

        override func viewDidLoad() {
        guard let color = self.color else { return }
        self.view.backgroundColor = color
        }

        func setColor(_ color:UIColor) {
        self.color = color
        }
        }






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 15 at 19:30









        impression7vx

        6991734




        6991734






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53326585%2fios-how-to-change-another-view-controllers-content-in-different-view-controller%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            How to change which sound is reproduced for terminal bell?

            Title Spacing in Bjornstrup Chapter, Removing Chapter Number From Contents

            Can I use Tabulator js library in my java Spring + Thymeleaf project?