Метод делегата из поповера не вызывается?
редактировать: решено. см. мой комментарий, почему.. извините этот беспорядок, пока не могу опубликовать ответ сам как новичок..
Приложение для iPad: у меня есть табличное представление и создание экземпляра из accessoryView всплывающего окна с другим табличным представлением. во всплывающем окне я хочу выбрать ячейку и передать этот индекс обратно в rootView.
Я реализовал протокол в PopoverController и соответствовал ему RootViewController.
Почему этот метод backPopover в корневом представлении не вызывается?
Любой намек очень ценится!!
Изменить: эта ссылка раскадровки указывает на контроллер навигации. Сам поповер работает нормально..
RootViewController.h
#import "PopoverViewController.h"
@interface rootViewController : UITableViewController <UIPopoverControllerDelegate, UITableViewDelegate, AddDelegate>
{
UIPopoverController *popOverController;
}
@property (nonatomic, retain) UIPopoverController *popOverController;
@property (nonatomic) PopoverContent *popoverContent;
RootView.m
-(void) backPopover:(int)index
{
NSLog(@"index sent:%i", index);
[popOverController dismissPopoverAnimated:YES];
}
// accessoryView Button
- (void) popOver:(UIButton*)paramSender
{
UITableViewCell *cell = (UITableViewCell*)paramSender.superview;
if (cell != nil)
{
//Table position for popover
UIButton *button = (UIButton *)cell.accessoryView;
if(![self popoverContent])
{
popoverContent = [[self storyboard]instantiateViewControllerWithIdentifier:@"PopoverContent"];
[popoverContent setDelegate:self];
popOverController = [[UIPopoverController alloc]initWithContentViewController:popoverContent];
popOverController.popoverContentSize = CGSizeMake(320.0, 600.0);
[popOverController setDelegate:self];
}
CGRect rect = button.frame;
[popOverController presentPopoverFromRect:rect inView:cell permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}
}
PopoverController.h
@protocol AddDelegate <NSObject>
- (void)backPopover: (int)index;
@end
@property (nonatomic, weak) id <AddDelegate> delegate;
PopoverController.m
@synthesize delegate;
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.delegate backPopover:indexPath.row];
}
2 ответа
Проблема была в том, что ссылка на раскадровку фактически указывала на навигационный контроллер. Выше код работает как шарм.
Пожалуйста, попробуйте это.
MyViewController *viewController=[[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
UIPopoverController* aPopover = [[UIPopoverController alloc]
initWithContentViewController:popupController];