需要iOS中代表的帮助吗
我很难理解代表们的想法。我试着用一个简单的例子来教自己,但就是不起作用 我的简单测试有两个类。A类和B类。ClassA具有委托定义。以及调用方法的按钮(需要iOS中代表的帮助吗,ios,delegates,Ios,Delegates,我很难理解代表们的想法。我试着用一个简单的例子来教自己,但就是不起作用 我的简单测试有两个类。A类和B类。ClassA具有委托定义。以及调用方法的按钮(-(void)buttonHasBeenPressed:(id)sender),该方法包含委托方法调用(-(void)buttonPressed)。ClassB被设置(我认为)监听ClassA委托,当按下-(void)按钮时:(id)sender被调用,它将写入控制台 以下是AppDelegate: .h: #import <UIKit/U
-(void)buttonHasBeenPressed:(id)sender
),该方法包含委托方法调用(-(void)buttonPressed
)。ClassB被设置(我认为)监听ClassA委托,当按下-(void)按钮时:(id)sender
被调用,它将写入控制台
以下是AppDelegate:
.h:
#import <UIKit/UIKit.h>
@interface DelegateTestAppDelegate : NSObject <UIApplicationDelegate> {
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@end
#import "DelegateTestAppDelegate.h"
#import "ClassA.h"
@implementation DelegateTestAppDelegate
@synthesize window=_window;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
ClassA *classA = [[ClassA alloc] init];
[self.window addSubview:[classA view]];
// Override point for customization after application launch.
[self.window makeKeyAndVisible];
return YES;
}
- (void)dealloc
{
[_window release];
[super dealloc];
}
@end
#import <UIKit/UIKit.h>
@protocol ClassADelegate <NSObject>;
-(void)buttonPressed;
@end
@interface ClassA : UIViewController {
id <ClassADelegate> delegate;
}
@property (retain) id <ClassADelegate> delegate;
-(void)buttonHasBeenPressed:(id)sender;
@end
#import "ClassA.h"
@implementation ClassA
@synthesize delegate;
-(id)init {
return self;
}
- (id)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle *)nibBundleOrNil {
return [self init];
}
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self action:@selector(buttonHasBeenPressed:) forControlEvents:UIControlEventTouchDown];
[button setTitle:@"hola" forState:UIControlStateNormal];
button.frame =CGRectMake(50, 200, 100, 20);
[self.view addSubview:button];
}
-(void)buttonHasBeenPressed:(id)sender {
[self.delegate buttonPressed];
NSLog(@"button has been pressed");
}
@end
#import <UIKit/UIKit.h>
#import "ClassA.h"
@interface ClassB : UIViewController <ClassADelegate> {
}
@end
#import "ClassB.h"
@implementation ClassB
-(id)init {
return self;
}
- (id)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle *)nibBundleOrNil {
return [self init];
}
-(void)buttonPressed {
NSLog(@"delegating!");
}
@end
这是ClassA:
.h:
#import <UIKit/UIKit.h>
@interface DelegateTestAppDelegate : NSObject <UIApplicationDelegate> {
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@end
#import "DelegateTestAppDelegate.h"
#import "ClassA.h"
@implementation DelegateTestAppDelegate
@synthesize window=_window;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
ClassA *classA = [[ClassA alloc] init];
[self.window addSubview:[classA view]];
// Override point for customization after application launch.
[self.window makeKeyAndVisible];
return YES;
}
- (void)dealloc
{
[_window release];
[super dealloc];
}
@end
#import <UIKit/UIKit.h>
@protocol ClassADelegate <NSObject>;
-(void)buttonPressed;
@end
@interface ClassA : UIViewController {
id <ClassADelegate> delegate;
}
@property (retain) id <ClassADelegate> delegate;
-(void)buttonHasBeenPressed:(id)sender;
@end
#import "ClassA.h"
@implementation ClassA
@synthesize delegate;
-(id)init {
return self;
}
- (id)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle *)nibBundleOrNil {
return [self init];
}
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self action:@selector(buttonHasBeenPressed:) forControlEvents:UIControlEventTouchDown];
[button setTitle:@"hola" forState:UIControlStateNormal];
button.frame =CGRectMake(50, 200, 100, 20);
[self.view addSubview:button];
}
-(void)buttonHasBeenPressed:(id)sender {
[self.delegate buttonPressed];
NSLog(@"button has been pressed");
}
@end
#import <UIKit/UIKit.h>
#import "ClassA.h"
@interface ClassB : UIViewController <ClassADelegate> {
}
@end
#import "ClassB.h"
@implementation ClassB
-(id)init {
return self;
}
- (id)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle *)nibBundleOrNil {
return [self init];
}
-(void)buttonPressed {
NSLog(@"delegating!");
}
@end
这是B类:
.h:
#import <UIKit/UIKit.h>
@interface DelegateTestAppDelegate : NSObject <UIApplicationDelegate> {
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@end
#import "DelegateTestAppDelegate.h"
#import "ClassA.h"
@implementation DelegateTestAppDelegate
@synthesize window=_window;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
ClassA *classA = [[ClassA alloc] init];
[self.window addSubview:[classA view]];
// Override point for customization after application launch.
[self.window makeKeyAndVisible];
return YES;
}
- (void)dealloc
{
[_window release];
[super dealloc];
}
@end
#import <UIKit/UIKit.h>
@protocol ClassADelegate <NSObject>;
-(void)buttonPressed;
@end
@interface ClassA : UIViewController {
id <ClassADelegate> delegate;
}
@property (retain) id <ClassADelegate> delegate;
-(void)buttonHasBeenPressed:(id)sender;
@end
#import "ClassA.h"
@implementation ClassA
@synthesize delegate;
-(id)init {
return self;
}
- (id)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle *)nibBundleOrNil {
return [self init];
}
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self action:@selector(buttonHasBeenPressed:) forControlEvents:UIControlEventTouchDown];
[button setTitle:@"hola" forState:UIControlStateNormal];
button.frame =CGRectMake(50, 200, 100, 20);
[self.view addSubview:button];
}
-(void)buttonHasBeenPressed:(id)sender {
[self.delegate buttonPressed];
NSLog(@"button has been pressed");
}
@end
#import <UIKit/UIKit.h>
#import "ClassA.h"
@interface ClassB : UIViewController <ClassADelegate> {
}
@end
#import "ClassB.h"
@implementation ClassB
-(id)init {
return self;
}
- (id)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle *)nibBundleOrNil {
return [self init];
}
-(void)buttonPressed {
NSLog(@"delegating!");
}
@end
当点击“hola”按钮时,预期的结果是将“按钮已按下”和“授权!”写入控制台
谢谢你的帮助。。。
Shawn您的ClassB实例在哪里?我在你发布的代码中找不到它。 另外,您在哪里将实例作为其委托设置到ClassA中?我也找不到
如果您不做这两件事,您的委托将永远不会被调用。您忘记将委托设置为符合ClassADelegate协议的类,这里它应该是ClassB的对象。好。。。我想我理解你的第一个问题。如果我只是从AppDelegate中的ClassB创建对象(只是懒惰),那么第一个问题就解决了。至于你的第二个问题,我不太明白。谢谢你的耐心。现在感觉非常密集…可能需要一些睡眠。您应该像下面这样将ClassB的实例设置为ClassA
ClassA.delegate=ClassB代码>否则,classA.delegate始终为零,并且将无法发送任何方法。对吧?:)