Iphone 来自另一个类的pushViewController
我想从我的FirstViewController推送一个视图控制器以加载BookDetailsViewController。这是我目前的设置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:(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中。