pushViewController из другого класса - PullRequest
0 голосов
/ 18 октября 2011

Я хочу нажать контроллер вида из моего FirstViewController, чтобы загрузить BookDetailsViewController. вот настройки, которые у меня сейчас есть.

// FirstViewController:(this is inside a uinavigationcontroller)

    -(IBAction)viewBookDetails:(id)sender
    {
      NSLog(@"woo");
      BookDetailsViewController *bdvc = [[BookDetailsViewController alloc] init];
      [self.navigationController pushViewController:bdvc animated:YES];
    }

    ==============================================================        

// BookScrollViewController: (where the button is located)

    [book1UIButton addTarget:self action:@selector(viewBookDetails:)   
    forControlEvents:UIControlEventTouchUpInside];

     -(void)viewBookDetails:(id) sender
    {
      FirstViewController *fvc = [[FirstViewController alloc] init];
      [fvc viewBookDetails:sender];
    }

    ============================================================== 

    //how BookScrollViewController is created
    BookScrollViewController *controller = [bookViewControllersArray  
    objectAtIndex:page];

    if ((NSNull *)controller == [NSNull null]) {
      NSString *bookTitle = @"ngee";
      controller = [[BookScrollViewController alloc]initWithBook:bookTitle  
      imageNamesArray:imgDataArray pageNumber:page totalResult:[newReleasesArray 
      count]];

      [bookViewControllersArray replaceObjectAtIndex:page withObject:controller];
      [controller release];
    }

    // add the controller's view to the scroll view
    if (nil == controller.view.superview) {
      CGRect frame = bookScroll.frame;
      frame.origin.x = frame.size.width * page;
      frame.origin.y = 0;
      controller.view.frame = frame;
      [bookScroll addSubview:controller.view];
    }

когда я нажимаю кнопку в BookScrollViewController, он вызывает IBAction, который у меня есть в FirstViewController, потому что он печатает мой nslog, но не загружает нажатие BookDetailsViewController в стек навигации.

Я попытался назначить кнопку из FirstViewController для вызова IBAction, и она загружается просто отлично. Итак, как я могу успешно позвонить на IBAction с FirstViewController, используя кнопку с BookScrollViewController?

спасибо!

Ответы [ 2 ]

0 голосов
/ 18 октября 2011

Когда вы делаете это:

FirstViewController *fvc = [[FirstViewController alloc] init];

вы, очевидно, создаете новый экземпляр FirstViewController.Этот новый экземпляр - , а не в UINavigationController, поэтому вы не можете вставить новый viewController в его свойство navigationController.

Что вы, вероятно, хотите сделать, - это сослаться на существующий экземпляр FirstViewController и вызов метода для него вместо создания его нового экземпляра.

0 голосов
/ 18 октября 2011

Когда вы назначаете действие следующим образом:

[book1UIButton addTarget:self action:@selector(viewBookDetails:) forControlEvents:UIControlEventTouchUpInside];

Вы говорите, что (текущий объект: self) BookScrollViewController *self будет реагировать на события UIControlEventTouchUpInside из book1UIButton.Это означает, что когда пользователь нажмет на кнопку, будет вызван метод viewBookDetails объекта класса BookScrollViewController.

Как вы упомянули в своем вопросе, вы определили и реализовали такой метод в FirstViewController.

Теперь вы должны

  1. реализовать этот метод в BookScrollViewController, который будет помещать новый контроллер в стек навигации, или
  2. установить другой объект, который будет реагировать на это событие кнопки, этот объектможет быть класса FirstViewController, например, [book1UIButton addTarget:self.firstViewController action:@selector(viewBookDetails:) forControlEvents:UIControlEventTouchUpInside];
...