我正在试图找出代表,因为我真正需要他们参与我正在进行的项目,但对于我的生活,我无法弄明白。无论我调整代码多少,都没有效果
ViewController.h:
#import <UIKit/UIKit.h>
@class ViewController;
@protocol testDelegate
-(void)sayHi;
@end
@interface ViewController : UIViewController
- (IBAction)button:(id)sender;
@property (weak, nonatomic)id <testDelegate> delegate;
@end
ViewController.m:
#import "ViewController.h"
#import "DelegateController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
DelegateController *dc = [[DelegateController alloc] init];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)button:(id)sender {
[self.delegate sayHi];
}
@end
DelegateController.h:
#import "ViewController.h"
@interface DelegateController : UIViewController <testDelegate>
@end
DelegateController.m:
#import "DelegateController.h"
@interface DelegateController ()
@end
@implementation DelegateController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
NSLog(@"init");
ViewController *vc = [[ViewController alloc] init];
[vc setDelegate:self];
}
return self;
}
-(void)viewDidLoad
{
[super viewDidLoad];
}
-(void)sayHi
{
NSLog(@"hi");
}
@end
- (IBAction)按钮:(id)发送方法连接到一个按钮,但点击时我没有输出。我做错了什么?
答案 0 :(得分:1)
ViewController.h:
#import <UIKit/UIKit.h>
@protocol testDelegate
-(void)sayHi;
@end
@interface ViewController : UIViewController
@end
ViewController.m:
#import "ViewController.h"
#import "DelegateController.h"
@interface ViewController () <testDelegate>
@end
@implementation ViewController
- (IBAction)pushNewViewController:(id)sender
{
DelegateController *dc = [[DelegateController alloc] init];
dc.delegate = self;
[self.navigationController pushViewController:dc animated:YES];
}
- (void)sayHi
{
NSLog(@"It works!");
}
@end
DelegateController.h:
#import "ViewController.h"
@interface DelegateController : UIViewController
@property (weak, nonatomic) id<testDelegate> delegate;
@end
DelegateController.m:
#import "DelegateController.h"
@implementation DelegateController
- (IBAction)button:(id)sender
{
if([_delegate respondsToSelector:@selector(sayHi)]) {
[_delegate performSelector:@selector(sayHi)];
}
}
@end
答案 1 :(得分:0)
你的问题是ViewController创建了DelegateController,然后在DelegateController中你创建了一个新的,不同的ViewController实例,并将自己设置为该实例的委托。通常,您设置委托的方式是DelegateController将创建ViewController的实例并将其自身设置为委托。这假设先创建了DelegateController,但具体如何执行此操作取决于您的应用程序结构,以及您如何从控制器移动到控制器。
答案 2 :(得分:0)
替换按钮单击方法
- (IBAction)button:(id)sender {
// Check whether your Delegate method is implemeted or not
if([delegate respondsToSelector:@selector(sayHi)])
{
// Call Delegate Method
[delegate performSelector:@selector(sayHi)];
}
}
答案 3 :(得分:0)
试试这个:
#import <UIKit/UIKit.h>
@class ViewController;
@protocol testDelegate
-(void)sayHi;
@end
@interface ViewController : UIViewController
- (IBAction)button:(id)sender;
@property (weak, nonatomic)id <testDelegate> delegate;
@end
#import "ViewController.h"
#import "DelegateController.h"
@interface ViewController ()
@property (nonatomic, strong) DelegateController *dc;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
_dc = [[DelegateController alloc] init];
[self setDelegate:_dc];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)button:(id)sender
{
[self.delegate sayHi];
}
@end
@interface DelegateController : UIViewController <testDelegate>
@end
#import "DelegateController.h"
@interface DelegateController ()
@end
@implementation DelegateController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
{
NSLog(@"init");
}
return self;
}
-(void)viewDidLoad
{
[super viewDidLoad];
}
-(void)sayHi
{
NSLog(@"hi");
}
@end