没有调用Delegate方法

时间:2015-12-03 18:34:37

标签: ios objective-c uiviewcontroller delegates

我确信这个问题已被多次询问,我看到了所有这些解决方案,但我无法弄清楚为什么我的委托方法没有被调用。

我有两个视图控制器,让我们说Viewcontroller1和ViewController2。首先加载我的ViewController2。我将ViewController1作为SWRevealViewController的一部分。当我单击ViewController上的按钮时,我想在ViewController2上运行该方法,但它没有这样做,

//在ViewController 1中。

@protocol Company ;
#import "ViewController2.h"

@protocol Company <NSObject>
@required -(void) companyChange : (NSString *) sample;

@end


@interface ViewController1 : UITableViewController<UIAlertViewDelegate>
@property (weak,nonatomic) id<Company> delegate;
@end


-(void) buttonClicked {
 [self.delegate companyChange:@"Hello"];
}

我们想要打印@&#34;你好&#34;在ViewController2中。

我需要导入ViewController2用于其他目的。

//在ViewController2中

#import "ViewController1.h"

extern NSString * const firstString ;
@interface ViewController2 : UIViewController <Company>


 -(void) viewDidLoad {
ViewController *vc1 = [[ViewController1 alloc]init];
    vc1.delegate = self;
}

//永远不会调用此方法

- (void) companyChange:(NSString *)sample {
    NSLog(@"%@",sample);
}

//还警告未定义公司协议。

//我已将buttonClicked方法连接到一个按钮,ViewController1是SWRevealController菜单。 我无法弄清楚代码有什么问题。

1 个答案:

答案 0 :(得分:1)

如果你正在使用SWRevealViewController,那么你真的不需要使用委托。如果你#import&#34; SWRevealViewController.h&#34;你可以使用方便函数revealViewController来获取对SWRevealViewController的引用。然后你可以这样说:

    SWRevealViewController *myRevealViewController = [self revealViewController];
    UIViewController *frontViewController = myRevealViewController.frontViewController;
    frontViewController.text = @"Something I Want to Show on Screen";

或者

    SWRevealViewController *myRevealViewController = [self revealViewController];
    UIViewController *backViewController = myRevealViewController.backViewController;
    backViewController.text = @"Something I Want to Show on Screen";

其中text是公共NSString属性。