Код выполняет, но представление не загружается, когда вызывается из функции? - PullRequest
1 голос
/ 27 апреля 2010

Я делаю приложение вроде книги, используя приложение viewBased. MainView действует как backgroundView для загрузки страниц. Каждая страница имеет другой вид и имеет собственный кончик. Когда я проведу пальцем по странице (фактически в mainView, которая загрузила текущий вид / страницу), эта страница будет удалена и будет добавлена ​​следующая / предыдущая страница.

[currentPage.view removeFromSuperview];
[self.view insertSubview:nextPage.view atIndex:0];

Я добавил popoverController с кнопкой в ​​этом главном окне. Его инициализируют с помощью класса tableviewController с именем popClass. PopClass - это еще один класс UITableViewController, который будет выступать в качестве родителя для popViewController.

self.myPopController = [[PopController alloc] initWithStyle:UITableViewStylePlain];
self.myPopOverController = [[UIPopoverController alloc] initWithContentViewController:myPopController];

Когда я выбираю определенную строку во всплывающем окне, я хочу, чтобы backgroundview (mainView) загружал страницу, соответствующую номеру строки.

Для этого я написал функцию в классе контроллера bookView (mainView). И вызывает его из родительского класса popOver, когда я выбираю определенную строку.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSInteger toPageNumber = indexPath.row + 1;
[viewController changeToPage:toPageNumber];
}

Функция и строки кода выполняются, но ничего не происходит. Даже строки журнала напечатаны, но никаких действий не происходит. Код тот же, что и для удаления страницы и добавления другой страницы, которая успешно работает при перелистывании вида / страницы.

В чем проблема? ИЛИ есть ли другой способ изменить представление в mainView с помощью всплывающего окна?

Ответы [ 2 ]

4 голосов
/ 02 мая 2010

У вас должна быть ссылка на контроллер фона в контроллере всплывающих окон.

В контроллере PopController у вас должен быть такой вариант:

@interface PopController: UITablViewController{

  //// other varibales;
      id delegate;
}

@property (nonatomic, retain) id delgate;

Теперь из класса, в котором вы показываете popovercontroller

Вы должны добавить эту строку:

[myPopController setDelegate:self];

Тогда вы можете легко получить доступ к любому методу класса контроллера основного вида. Используя

[delegate callTheRequiredMethod];

Надеюсь, это поможет.

Спасибо

Madhup

1 голос
/ 27 апреля 2010

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

(1) Если в mainView выбрана строка, введите popoverController модально:

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

(2) Когда что-то меняется в popoverController, например, выбирается строка, установите значение в parentViewController (которое должно быть MainView):

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    self.parentViewController.value = someValue;
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

(3) Откажитесь от popoverController где бы вы ни выбрали, позвонив по номеру:

[self dismissModalViewControllerAnimated:YES]`
...