[英]Why is my delegate method not called in a storyboard?
我在UINavigationController
嵌入了兩個UIViewController
。 第一個視圖控制器具有以下源代碼:
ViewController.h:
#import <UIKit/UIKit.h>
#import "ViewController_2.h"
@interface ViewController : UIViewController <HanselDelegate>
@property (strong, nonatomic) IBOutlet UILabel *TestLabel;
- (IBAction)ButtonClick:(id)sender;
@end
ViewController.m:
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)ButtonClick:(id)sender {
NSLog(@"To call the second UIViewController...");
[self performSegueWithIdentifier:@"idCallSecond" sender:self];
}
-(void)SetFirstLabel {
NSLog(@"To run the delegate method...");
_TestLabel.text = @"Hello from the second...";
}
@end
第二個控制器具有以下代碼:
ViewController2.h:
#import <UIKit/UIKit.h>
@protocol HanselDelegate <NSObject>
-(void)SetFirstLabel;
@end
@interface ViewController_2 : UIViewController
@property (nonatomic, weak)id<HanselDelegate> delegate;
- (IBAction)Button2Click:(id)sender;
@end
ViewController2.m:
#import "ViewController_2.h"
@interface ViewController_2 ()
@end
@implementation ViewController_2
- (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)Button2Click:(id)sender {
if ([self.delegate respondsToSelector:@selector(SetFirstLabel)]) {
NSLog(@"To call the delegate method");
[self.delegate SetFirstLabel];
}
[self.navigationController popViewControllerAnimated:YES];
}
@end
如果我按ViewController2
的按鈕,則不會調用SetFirstLabel
方法。 為什么會這樣呢? 我忘了什么嗎?
您忘記在ViewController.m中設置委托
在ViewController.m中設置
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"idCallSecond"]) {
ViewController_2 * vc2 = [segue destinationViewController];
vc2.delegate = self;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.