2015-05-30 7 views
-2

Я создал пользовательский UIView с кнопками выше, этот вид открывается как всплывающее окно в viewcontroller. Я хочу, чтобы контроллер просмотра перехватывал нажатие кнопок, поэтому я создал методы протокола, но делегаты в контроллере представления никогда не вызываются.delegate стать nil iOS

Протокол:

@protocol InsertDelegate <NSObject> 

-(void)addNode:(double)x pointY:(double)y radius:(double)r forw:(int)forw; 
-(void)cancelView:(UIView*)view; 

@end 

В AddNewNode.h

@interface AddNewNode : UIView 

@property (assign, nonatomic)id <InsertDelegate> delegate; 

- (IBAction)actionCancel:(id)sender; 

- (IBAction)actionAdd:(id)sender; 
@end 

В AddNewNode.m

- (IBAction)actionCancel:(id)sender { //this action is connect with storyboard 
    NSLog(@"%@", self.delegate); 
    //(null) 
    [self.delegate cancelView:self]; 
} 

- (IBAction)actionAdd:(id)sender { //this action is connect with storyboard 
    NSLog(@"%@", self.delegate); 
    //(null) 
    [self.delegate addNode:x pointY:y radius:r forw:f]; 

} 

В ViewController.h:

@interface ViewController : UIViewController <InsertDelegate> 

В ViewController.m

(IBAction)addNewNode:(id)sender { 

     AddNewNode * addRowView =[[AddNewNode alloc]init]; 

     addRowView.delegate=self; 
     [self.view addSubview: addRowView]; 

} 

//delegate methods never called 
-(void)addNode:(double)x pointY:(double)y radius:(double)r forw:(int)forw{ 

} 
-(void)cancelView:(UIView*)view{ 

} 

В UIView обычае self.delegate утратившие и я не понимаю, почему

+0

вы используете '@ synthesize' для вашего 'делегата '? – mkeremkeskin

+0

Я сделал это сейчас, но результат тот же, методы не называются –

+1

Был ли ваш IBActions? Можете ли вы это проверить дважды? –

ответ

-1

попробовать следующий

Создать частную собственность для хранения экземпляра

@implement AddNewNode() 
@propery (nonatomic, strong) AddNewNode * addNewNode; 
@end 

изнутри обработчик кнопки

(IBAction)addNewNode:(id)sender { 

    self.addNewNode =[[AddNewNode alloc]init]; 
    self.addRowView.delegate=self; 

} 
+0

Вы имеете в виду '@ property' под' ViewController.h' .. – 0yeoj

+0

Я сделал это сейчас, но все еще не работает –

+0

В UIView пользовательский self.delegate станет нулевым, и я не понимаю, почему –

0

Что о делать IBOutlet для

ViewController.h

@interface ViewController : UIViewController <InsertDelegate> 

@property (strong, nonatomic) AddNewNode * addNewNode; 
//or connect IBOutlet of your `addNewNode` 
@property (strong, nonatomic) IBOutlet (addNewNode); 

@end 

ViewController.m

- (IBAction)addNewNode:(id)sender 
{ 
    // you dont need to allocate anymore 
    self.addRowView.delegate=self; 
    // and you need to trigger the delegate from `- (IBAction)actionAdd:(id)sender;` 
    [self.addRowView actionAdd:sender]; 
} 
+0

метод делегата все еще не вызывается, когда я нажимаю кнопку –

+0

, вы вызвали это '[self.addRowView actionAdd: sender];'? – 0yeoj

+0

Да, метод делегата вызывается во время создания представления, но не тогда, когда мне это нужно, когда я нажимаю кнопку –

Смежные вопросы