我确信这个问题已被多次询问,我看到了所有这些解决方案,但我无法弄清楚为什么我的委托方法没有被调用。
我有两个视图控制器,让我们说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菜单。 我无法弄清楚代码有什么问题。
答案 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属性。