0

У меня есть parentViewController и subView, в viewWillAppear в parentViewController я добавил subview к self.view и я поставил delegate из подвида в self. Когда я пытаюсь использовать делегат в subview для push другого контроллера представления, он не работает, я проверил значение делегата и получил «null».ParentViewController и подтаблицы: установка делегат возвращает нуль

Моя основная идея: когда пользователь нажимает кнопку в подвью, мне нужно нажать другой viewController, используя navigationController родительского контроля.

Вот мой код

//parentViewController.h 

#import "mysubView.h" 

@interface parentViewController : UIViewController <mysubViewDelegate> 
. 
.//Some properties here 
. 
@end 

В файле реализации:

//parentViewController.m 

-(void) viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    mysubView *myView; 

    //GlobalObjects is to load the file in a certain language 
    myView = [[GlobalObjects loadNibNamed:@"mysubView" owner:self options:nil] objectAtIndex:0]; 

    //Print myView.delegate gets the correct value here 
    myView.delegate = self; 

    [self.view addSubview:myView]; 

} 
. 
. 
. 
-(void)pushViewControllerUsingDelegate:(UIViewController *)viewController 
{ 
    [self.navigationController pushViewController:viewController animated:YES]; 
} 

В mysubView.h:

//mysubView.h 

@protocol mysubViewDelegate <NSObject> 

-(void)pushViewControllerUsingDelegate:(UIViewController *)viewController; 

@end 

@interface mysubView : UIView< UITableViewDataSource, UITableViewDelegate> 
{ 
} 

@property (nonatomic , retain) id <mysubViewDelegate> delegate; 

-(IBAction)ButtonClicked:(UIButton *)sender; 


@end 

В mysubView.m

@implementation mysubView 
@synthesize delegate; 
. 
. 
. 

-(IBAction)ButtonClicked:(UIButton *)sender 
{ 
    newViewController *newController = [[newViewController alloc] initWithNibName:@"newViewController" bundle:nil]; 

    //Here is my problem in this line .. self.delegate is null here 
    [self.delegate pushViewControllerUsingDelegate:newViewController]; 
} 

-(void)pushViewControllerUsingDelegate:(UIViewController *)viewController 
{ 
    [self.delegate pushViewControllerUsingDelegate:viewController]; 
} 
@end 
+2

Начать классы с прописной буквы, поэтому 'ParentViewController',' newViewController', ... –

+0

Сколько экземпляров 'mysubView' вы создаете? – Wain

+0

Мои классы уже начинаются с заглавной буквы, извините за это, но когда я написал этот вопрос, я использовал маленькие буквы – Sawsan

ответ

0
myView = [[GlobalObjects loadNibNamed:@"mysubView" owner:self options:nil] objectAtIndex:0]; 

Использование mysubView вместо GlobalObjects вроде как ниже

myView = [[mysubView loadNibNamed:@"mysubView" owner:self options:nil] objectAtIndex:0]; 

Пожалуйста, используйте заглавные буквы при создании новых class.this только условность, но вы должны следовать за ним.

+0

как это даже отдаленно ответить на вопрос?! – Petar

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