繁体   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