2013-07-23 2 views
0

Я хочу создать UIPopOverController в iPad. И этот UIPopOverController открывается при нажатии на UIBarButonItem, который отображается программно.создать UIPopOverController в iPad

UIButton *btnRight = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [btnRight setImage:[UIImage imageNamed:@"right.PNG"] forState:UIControlStateNormal]; 
    btnRight.frame = CGRectMake(0, 0, 32, 32); 
    [btnRight addTarget:self action:@selector(pressDone) forControlEvents:UIControlEventTouchUpInside]; 
    UIBarButtonItem *btnRightBarItem= [[UIBarButtonItem alloc] initWithCustomView:btnRight]; 

    [[self navigationItem] setRightBarButtonItem:btnRightBarItem]; 

Мой код селектора:

- (void)pressDone:(id)sender 
{ 
    PopoverViewController *PopoverView =[[PopoverViewController alloc] initWithNibName:@"PopoverViewController" bundle:nil]; 
    self.popOver =[[UIPopoverController alloc] initWithContentViewController:PopoverView]; 
    [self.popOver presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 
} 

Когда я использую выше код, я получаю ошибку,

[HrOfferDetailVC pressDone]: unrecognized selector sent to instance 0x73bb670' 

ответ

1

Ваше имя метода pressDone: не pressDone

[btnRight addTarget:self action:@selector(pressDone:) forControlEvents:UIControlEventTouchUpInside]; 

сделает работу

У вас есть цель, как добавить себя и я здесь, я думаю, HrOfferDetailVC поэтому метод должен быть объявлен в .h и должны быть реализованы в HrOfferDetailVC.m

Используйте этот код, чтобы показать поповер

- (void)pressDone:(id)sender 
{ 
UIButton *buttonItem=(UIButton *)sender; 

PopoverViewController *PopoverView =[[PopoverViewController alloc] initWithNibName:@"PopoverViewController" bundle:nil]; 
self.popOver =[[UIPopoverController alloc] initWithContentViewController:PopoverView]; 

[popOver presentPopoverFromRect:buttonItem.frame inView:buttonItem.superview permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 

} 
+0

Я добавляю: после нажатия кнопкиDone, но все та же ошибка возникает. [btnRight addTarget: самостоятельное действие: @selector (нажмите кнопкуДата для forControlEvents: UIControlEventTouchUpInside]; – kels

+0

@kels есть метод в этом представлении контроллера '- (void) pressDone: (id) отправитель', и он объявлен в .h? –

+0

Да, есть - (void) pressDone: (id) метод отправителя в файле viewController.h. – kels

1

попробовать это:

заменить следующие строки

[btnRight addTarget:self action:@selector(pressDone) forControlEvents:UIControlEventTouchUpInside]; 

с

[btnRight addTarget:self action:@selector(pressDone:) forControlEvents:UIControlEventTouchUpInside]; 

Объяснение

Добавить : знак после pressDone кнопки. Потому что вы передаете один параметр в методе определения т.е.

- (void)pressDone:(id)sender 

И вы не проходят ни одного аргумента в вызывающем методе ... так, как произошла ошибка, потому что метод не найден в коде без аргументов.

+0

Я добавляю: после нажатияОтменить, но все же такая же ошибка. [btnRight addTarget: самостоятельное действие: @selector (нажмите кнопкуДата для forControlEvents: UIControlEventTouchUpInside]; – kels

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