簡體   English   中英

為什么在情節提要中未調用我的委托方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM