Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 来自另一个类的pushViewController_Iphone_Objective C_Ios_Uinavigationcontroller_Pushviewcontroller - Fatal编程技术网

Iphone 来自另一个类的pushViewController

Iphone 来自另一个类的pushViewController,iphone,objective-c,ios,uinavigationcontroller,pushviewcontroller,Iphone,Objective C,Ios,Uinavigationcontroller,Pushviewcontroller,我想从我的FirstViewController推送一个视图控制器以加载BookDetailsViewController。这是我目前的设置 // FirstViewController:(this is inside a uinavigationcontroller) -(IBAction)viewBookDetails:(id)sender { NSLog(@"woo"); BookDetailsViewController *bdvc = [[Bo

我想从我的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中的按钮时,它会调用我在FirstViewController中的iAction,因为它会打印我的nslog,但不会加载。将BookDetailsViewController推到导航堆栈中

我尝试从FirstViewController分配一个按钮来调用iAction,它加载得很好。那么,如何使用BookScrollViewController中的按钮从FirstViewController成功调用iAction呢


谢谢

以以下方式分配操作时:

[book1UIButton addTarget:self action:@selector(viewBookDetails:) forControlEvents:UIControlEventTouchUpInside];
您说当前对象:self BookScrollViewController*self将响应Book1iButton内部的事件uicontrolEventTouchUp。这意味着当用户点击按钮时,将调用BookScrollViewController类对象的viewBookDetails方法

正如您在问题中提到的,您已经在FirstViewController中定义并实现了这种方法

现在你应该

在BookScrollViewController中实现将新控制器推送到导航堆栈上的方法,或者 设置将在该按钮事件上响应的另一个对象,该对象可以是FirstViewController类,例如,[Book1Ibutton添加目标:self.FirstViewController操作:@selectorviewBookDetails:forControlEvents:uicontrolEventTouchInside]; 执行此操作时:

FirstViewController *fvc = [[FirstViewController alloc] init];
显然,您创建了FirstViewController的一个新实例。该新实例不在UINavigationController中,因此无法将新的viewController推送到其navigationController属性上


您可能要做的是引用FirstViewController的现有实例并调用该实例上的方法,而不是创建它的新实例。

我在BookScrollViewController中创建了FirstViewController的属性,如@PropertyOnAtomic,RetainirstViewController*FirstViewController;我在我的viewDidLoad-voidviewDidLoad{firstViewController=[[firstViewController alloc]init];[super viewDidLoad];[Book1Ibutton添加目标:firstViewController操作:@selectorviewBookDetails:forControlEvents:UIControlEventTouchUpInside]..但is仍然无法加载我的BookDetailsViewController。这是错误的。创建此类属性的方式是正确的。现在需要正确设置它:创建BookDetailsViewController*bookController=[[BookDetailsViewController alloc]init];在您的FirstViewController中,您应该设置bookController.FirstViewController=self;很抱歉,我一点也不明白。注意:我创建的属性在BookScrollViewController中,我还需要在BookDetailsViewController中创建FirstViewController的另一个属性?我很抱歉没有。注意:在创建cl控制器的地方张贴代码ass BookScrollViewController我包括了我创建的BookScrollViewController部分。你看,BookScrollViewController将作为子视图添加到FirstViewController中。