В принципе, теперь я намерен использовать делегат для передачи значений между контроллерами представлений.Делегат не отвечает на селектор
Поток контроллеров вида A -> B -> C с использованием push segue.
Когда пользователь выполняет какое-либо действие в контроллере вида «C», как передать значение BACK на первый контроллер представления, который является «A»?
В моем коде «self.delegate» всегда равно нулю, и метод делегата никогда не запускается.
Ниже приведен код первых ОК и третьего ВК:
Первого VC .m:
#import "ViewController.h"
#import "ThirdViewController.h"
@interface ViewController()<PassValueProtocal>
@property (weak, nonatomic) IBOutlet UILabel *myLabel;
@end
@implementation ViewController
{
ThirdViewController *thirdVC;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void) passValueBack:(NSString *)value
{
NSLog(@"HAHAH");
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)segueToSecondVC:(UIButton *)sender
{
thirdVC = [ThirdViewController sharedManager];
thirdVC.delegate = self;
}
@end
Третьего VC .h:
#import <UIKit/UIKit.h>
@protocol PassValueProtocal <NSObject>
- (void) passValueBack: (NSString *) value;
@end
@interface ThirdViewController : UIViewController
@property (weak, nonatomic) id<PassValueProtocal>delegate;
+ (id) sharedManager;
@end
Третьего VC .m:
#import "ThirdViewController.h"
@interface ThirdViewController()
@property (weak, nonatomic) IBOutlet UITextField *myTextField;
@end
@implementation ThirdViewController
+ (id) sharedManager
{
NSLog(@"myDelegate sharedManager");
static ThirdViewController *sharedManager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{ sharedManager = [[self alloc] init]; });
return sharedManager;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)passValueAction:(UIButton *)sender
{
NSLog(@"%@", self.delegate);
if ([self.delegate respondsToSelector:@selector(passValueBack:)])
{
[self.delegate passValueBack:self.myTextField.text];
}
}
@end
где код SecondVC, где вы нажимаете ThirdVC. В этот момент вам необходимо передать делегат от второго до третьего. Таким образом, у ThirdVC будет делегат. –
@ iosDev82 Вы имеете в виду, что делегат может общаться только с двумя контроллерами представлений, которые связаны друг с другом? –
Не обижайтесь, но ваш вопрос действительно болен. Сначала вы говорите о 3 VC, но ваш код имеет 2 контроллера вида. –