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.

有帮助吗?

解决方案

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];
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top