0

Having two view controller within a navigation controller:

PhoneNumbersTVC > holds a list of phone numbers added by NewPhoneNumberTVC NewPhoneNumberTVC > a controller for adding phone numbers

When I tap on cancel on NewPhoneNumberTVC I like to get back to PhoneNumbersTVC with a delegation as follow.

PhoneNumbersTVC.h

#import <UIKit/UIKit.h>
#import "NewPhoneNumberTVC.h"

@interface PhoneNumbersTVC : UITableViewController <NewPhoneNumberTVCDelegate>

@end

PhoneNumbersTVC.m

- (void)saveBtnWasTappedOnNewPhoneNumberTVC:(NewPhoneNumberTVC *)newPhoneNumberTVC
{
    NSLog(@"saveBtnWasTappedOnNewPhoneNumberTVC");
    [newPhoneNumberTVC.navigationController popViewControllerAnimated:YES];
}

- (void)cancelBtnWasTappedOnNewPhoneNumberTVC:(NewPhoneNumberTVC *)newPhoneNumberTVC
{
    NSLog(@"cancelBtnWasTappedOnNewPhoneNumberTVC");
    [newPhoneNumberTVC.navigationController popViewControllerAnimated:YES];
}

NewPhoneNumberTVC.h

#import <UIKit/UIKit.h>

@class NewPhoneNumberTVC;

@protocol NewPhoneNumberTVCDelegate <NSObject>

- (void)saveBtnWasTappedOnNewPhoneNumberTVC:(NewPhoneNumberTVC *)newPhoneNumberTVC;
- (void)cancelBtnWasTappedOnNewPhoneNumberTVC:(NewPhoneNumberTVC *)newPhoneNumberTVC;

@end


@interface NewPhoneNumberTVC : UITableViewController

@property (weak, nonatomic) id <NewPhoneNumberTVCDelegate> delegate;
@property (strong, nonatomic) NSManagedObjectContext *managedOC;

@property (weak, nonatomic) IBOutlet UITextField *phoneNumberTextField;

- (IBAction)saveBtnTapped:(UIBarButtonItem *)sender;
- (IBAction)cancelBtnTapped:(UIBarButtonItem *)sender;

@end

NewPhoneNumberTVC.m

- (IBAction)cancelBtnTapped:(UIBarButtonItem *)sender
{
    NSLog(@"cancelBtnTapped");
    self.phoneNumberTextField.text = @"";
    self.phoneKindTextField.text = @"";
    [self.delegate cancelBtnWasTappedOnNewPhoneNumberTVC:self];

}

When I tap on cancel on NewPhoneNumberTVC I see that above method cancelBtnTapped fires but delegation does not work, no method executes in PhoneNumbersTVC. View doesn't go away and I don't see: cancelBtnWasTappedOnNewPhoneNumberTVC on console.

Serg
  • 2,346
  • 3
  • 29
  • 38
  • Are you sure you have set the delegate? If yes, at what time you are setting the delegate? – Ilanchezhian Mar 09 '13 at 15:32
  • WHere did you set the delegate of NewPhoneNumberTVC? – lu yuan Mar 09 '13 at 15:33
  • @lu yuam I tell the delegate that cancel was tapped in method: `cancelBtnTapped` `[self.delegate cancelBtnWasTappedOnNewPhoneNumberTVC:self];` –  Mar 09 '13 at 15:38

1 Answers1

0

If you want this method cancelBtnWasTappedOnNewPhoneNumberTVC: get called, you definitely need to set the delegate of your NewPhoneNumberTVC object to a PhoneNumbersTVC object. For example, there should be existing some codes in PhoneNumbersTVC.m :

NewPhoneNumberTVC *myNewPhoneNumberTVC = [[NewPhoneNumberTVC alloc] init];
myNewPhoneNumberTVC.delegate = self;

You can log as following to verify that the delegate is set successfully or not"

NewPhoneNumberTVC.m

- (IBAction)cancelBtnTapped:(UIBarButtonItem *)sender
{
NSLog(@"cancelBtnTapped");
self.phoneNumberTextField.text = @"";
self.phoneKindTextField.text = @"";
NSLog(@"self.delegate :%@",self.delegate);
[self.delegate cancelBtnWasTappedOnNewPhoneNumberTVC:self];
}
lu yuan
  • 7,207
  • 9
  • 44
  • 78