Навигационный контроллер в поповере - PullRequest
5 голосов
/ 02 марта 2011

Я новичок в разработке приложений для ipad.

Я заинтересован в создании приложения, в котором у меня есть всплывающее окно с табличным представлением со списком элементов.Затем я выбираю элемент, и представление переходит к другому виду таблицы, состоящему из другого списка элементов и кнопки навигации назад.

уровень, до которого я буду углубляться, является динамическим.

Пожалуйста, предоставьте мне соответствующие ресурсы, чтобы помочь мне решить проблему.

Ответы [ 3 ]

5 голосов
/ 03 ноября 2011

Я делал это раньше, и это хорошо работает! Просто назначьте эту функцию вашей кнопке (возможно, UIBarButtonItem):

UIPopoverController *popover;
bool isPopoverOpen = false;
-(void)openPopover{
    if(!isPopoverOpen){
        FirstViewController *firstViewCtrl = [[PartsViewCtrl alloc] init];
        UINavigationController *navbar = [[UINavigationController alloc] initWithRootViewController:firstViewCtrl];
        [firstViewCtrl release];
        navbar.contentSizeForViewInPopover = CGSizeMake(TABLE_WIDTH, TABLE_HEIGHT);
        popover = [[UIPopoverController alloc] initWithContentViewController:navbar];
        [navbar release];
        popover.delegate = self;
        popover.popoverContentSize = CGSizeMake(TABLE_WIDTH, TABLE_HEIGHT);
        [popoverOnPartsView presentPopoverFromBarButtonItem:barButtonItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
        isPopoverOpen = true;
    }else{
        [popover dismissPopoverAnimated:YES];
        [popover release];
        isPopoverOpen = false;
    }
}

И реализовать эту функцию для FirstViewController, который имеет UITableView:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    SecondViewController *secondViewController = [[SecondViewController alloc] init];
    [self.navigationController pushViewController:secondViewController animated:YES];
    [secondViewController release];
}

Теперь вы можете добавить UITableView в SecondViewController, тоже. И используйте этот сценарий для других таблиц!

Я надеюсь, что это работает для вас!

4 голосов
/ 02 марта 2011

При создании всплывающего окна вам просто нужно выделить UINavigationController и использовать его для управления иерархией представления внутри самого всплывающего окна. Быстрый поиск в Интернете показал это руководство , которое охватывает то, что вам нужно знать.

Я также хотел добавить, что вы должны в полной мере освоиться с разработкой Objective-C и iOS в целом. Не пытайтесь слепо использовать вещи, которые вы нашли в сети, не понимая, что вы на самом деле делаете:)

2 голосов
/ 11 сентября 2012
Do the following steps 

1) В действии кнопки (при нажатии на нее должна появиться всплывающая подсказка) введите код

[здесь PopOverContentViewController - это viewController, в котором у меня есть представление таблицы и несколько списков элементов, которые должны отображаться при появлении всплывающего окна]

 - (IBAction)callPopOver:(id)sender 
  {


    UIButton *button = (UIButton*)sender;
    PopOverContentViewController1 *popOverContent = [[PopOverContentViewController1     alloc]initWithNibName:@"PopOverContentViewController1" bundle:nil];

    UINavigationController *navbar = [[UINavigationController alloc]  initWithRootViewController:popOverContent];

    navbar.contentSizeForViewInPopover = CGSizeMake(266, 200);
    popover = [[UIPopoverController alloc] initWithContentViewController:navbar];
    popover.delegate = self;
    [popover presentPopoverFromRect:CGRectMake(button.frame.size.width / 2,   button.frame.size.height / 1, 1, 1) inView:button   permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
    [popover setPopoverContentSize:CGSizeMake(266, 200) animated:YES]; 
    [popUpContent release];


    }      

2) теперь для изменения табличного представления при нажатии на любую из строк введите этот код в PopOverViewController.m

[здесь PopOverViewController2 - это ViewController, где у нас будет отображаться следующий табличный вид]

    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    PopOverViewController2 *secondViewController = [[PopOverViewController2 alloc] init];
    [self.navigationController pushViewController:secondViewController animated:YES];
    [secondViewController release];
    }

3) чтобы избежать изменения размера всплывающего окна во время навигации, напишите следующий код в viewDidLoad обоих контроллеров представления (т. Е. PopOverContentViewController1 и PopOverContentViewController2)

 - (void)viewDidLoad
 {
  [super viewDidLoad];
  [self setContentSizeForViewInPopover:CGSizeMake(266, 200)];
 }
...