一些帮助将不胜感激.
我有这个简单的项目用于测试目的:
http://dl.dropbox.com/u/10101053/testDelegate.zip
我想在委托方法中传递NSString但是这段代码不起作用.
testDelegateViewController.h
@protocol testDelegateViewControllerDelegate;
@interface testDelegateViewController : UIViewController {
id<testDelegateViewControllerDelegate> delegate;
IBOutlet UIButton *button;
}
@property (nonatomic, assign) id<testDelegateViewControllerDelegate> delegate;
@property (nonatomic, retain) IBOutlet UIButton *button;
- (void)pass;
@end
@protocol testDelegateViewControllerDelegate
- (void)passSomeToDelegate:(NSString *)some;
@end
Run Code Online (Sandbox Code Playgroud)
testDelegateVewController.m
#import "testDelegateViewController.h"
@implementation testDelegateViewController
@synthesize delegate, button;
- (void)pass
{
NSLog(@"Button Pressed");
[self.delegate passSomeToDelegate:@"some"];
}
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{
[super viewDidLoad];
[button addTarget:self action:@selector(pass) forControlEvents:UIControlEventTouchUpInside];
}
//rest of code
Run Code Online (Sandbox Code Playgroud)
AppDelegate.h
#import "testDelegateViewController.h"
@interface AppDelegate : NSObject <UIApplicationDelegate, testDelegateViewControllerDelegate> {
}
Run Code Online (Sandbox Code Playgroud)
AppDelegate.m
#import "AppDelegate.h"
@implementation AppDelegate
@synthesize window=_window;
@synthesize viewController=_viewController;
#pragma mark Delegate Method
- (void)passSomeToDelegate:(NSString *)some
{
NSLog(@"%@", some);
}
//rest of code
Run Code Online (Sandbox Code Playgroud)
但是在我的控制台中,按下按钮时不打印任何内容.
谢谢
你忘了设置你的代表了.您可以在application:didFinishLaunchingWithOptions:方法中设置委托.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.viewController.delegate = self;
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
}
Run Code Online (Sandbox Code Playgroud)
我添加self.viewController.delegate = self;了设置委托.