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)
ios swift
add a comment |
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)
ios swift
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
add a comment |
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)
ios swift
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
ios swift
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
add a comment |
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
add a comment |
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
}
}
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
}
}
add a comment |
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
}
}
add a comment |
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
}
}
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
}
}
answered Nov 15 at 19:30
impression7vx
6991734
6991734
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
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