// viewcontrollerA.h
@class viewA;
@protocol viewADelegate<NSObject>
- (void)emailidgetmethod:(NSString *)string;
@end
@interface Login : UIViewController
{
}
@property (nonatomic,assign) id <viewADelegate> delegate;
@end
// viewcontrollerA.m
#import "viewcontrollerA.h"
@synthesize delegate;
- (void)viewDidLoad
{
[self.delegate emailidgetmethod:@"myString"];
}
// viewcontrollerB.h
#import "viewcontrollerA.h"
@interface viewcontrollerB : UIViewController<viewADelegate>
@end
// viewcontrollerB.m #import“viewcontrollerB.h”
- (void)viewDidLoad
{
viewcontrollerA *viewA= [[viewcontrollerA alloc]init];
[viewA setDelegate:self];
}
- (void)emailidgetmethod:(NSString *)string
{
NSLog(@"Delegatehomemethod %@",string); // This is not calling.
}
答案 0 :(得分:-1)
方法不调用,因为viewControllerA的viewDidLoad方法没有调用。您应该将viewControllerA作为子视图添加到viewControllerB,并将viewContollerA视图添加为viewControllerB视图的子视图
答案 1 :(得分:-1)
我认为,您的ViewControllerA
先加载,然后导航到ViewControllerB
控制器。如果是这种情况,您的委托函数将不会调用,因为您可以看到,当您加载ViewControllerA
并调用viewDidLoad
时,您的delegate
为零,因此无法进行调用呼叫功能。
因此,您需要先加载ViewControllerB
并导航至ViewControllerA
由于
答案 2 :(得分:-1)
您正在调用另一个ViewController中ViewControllerA中声明的实例方法。这不会被调用,因为您只能在ViewControllerA中访问该方法。您可以将 - (void)更改为+(void),以使其成为类方法。然后在ViewControllerB中,创建ViewControllerA ViewControllerA *VCA = [[ViewControllerA alloc] init];
的实例
然后,您可以在ViewControllerA中访问此方法。[VCA methodName];