UINavigationBar title and a right button

13,368

Your question is a little confusing.

I "think" you are saying you are having issues communicating between view controllers.

If this is the case, the real issue is that your view controllers should NOT be communicating with each other. They, instead should be storing state in a model.

If you do this, then you will have no issues. Consider having a model singleton to save the information that is getting lost.

If I have misunderstood your issue, please let me know.

Share:
13,368
Ilya Suzdalnitski
Author by

Ilya Suzdalnitski

Full-stack engineer with a focus on delivering reliable and maintainable software. I have a strong preference for functional programming and believe that it is the most important aspect of producing quality software. Passionate about continuous improvement, and always eager to learn and apply new technology.

Updated on June 04, 2022

Comments

  • Ilya Suzdalnitski
    Ilya Suzdalnitski about 2 years

    I have a navigation controller and in it a view controller:

    -NavigationController1
    --MyViewController
    

    And as well I have another navigation controller - NavigationController2. I want to call MyViewController from another view controller - ViewController2, that was pushed into NavigationController2. -NavigationController2 --ViewController2

    I do it in the following way:

    @implementation ModifyDicVController
    
    - (void)viewWillAppear:(BOOL)animated {
        [super viewWillAppear:animated];
    
        self.navigationItem.rightBarButtonItem = [ [ [UIBarButtonItem alloc]
                        initWithBarButtonSystemItem:
                        UIBarButtonSystemItemAdd target:self
                        action:@selector(add_clicked)] autorelease];
    
    }
    
    
    -(void) add_clicked
    {
        [navigationController pushViewController: addWordsVController animated: YES];
    }
    
    @end
    

    And here is the viewWillAppear method of MyViewController(the one that is being called):

    - (void)viewWillAppear:(BOOL)animated {
        [super viewWillAppear:animated];
        [self setTitle: @"My title"];
    }
    

    I am adding a "done" button to the Navigation Bar when user starts to edit a text field:

    - (void) textFieldDidBeginEditing: (UITextField *) textField
    { 
        self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] 
                    initWithTitle: NSLocalizedString(@"button: done", @"")
                    style:UIBarButtonItemStyleDone 
                    target:self 
                    action:@selector(doneEditing)] 
                    autorelease];
    }
    

    The problem is: if I call MyViewController from ViewController2 that was pushed into NavigationController2 and after that I call MyViewController from its own NavigationController1, the title of a navigation bar and a done button is not being added. However viewWillAppear and textFieldDidBeginEditing methods of MyViewController are being called.

    What is the problem and how can I fix it?

    Thanks.