如何从一个视图控制器获取值到另一个视图控制器?

时间:2015-07-14 11:22:34

标签: ios objective-c iphone

// 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.
   }

3 个答案:

答案 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];