Ios UIPopoverController不解散
在我的应用程序中,我有以下层次结构: AppViewController(根)-->HUDViewController(作为AVC中的容器viewcontroller)-->NavBar(UIView的子视图)-->UIButtons 当你触摸一些按钮时,他们需要从AVC启动UIPOPCovercontroller。我将通知从NavBar类发送回AVC。在通知中心的选择器中,我有以下代码Ios UIPopoverController不解散,ios,uipopovercontroller,Ios,Uipopovercontroller,在我的应用程序中,我有以下层次结构: AppViewController(根)-->HUDViewController(作为AVC中的容器viewcontroller)-->NavBar(UIView的子视图)-->UIButtons 当你触摸一些按钮时,他们需要从AVC启动UIPOPCovercontroller。我将通知从NavBar类发送回AVC。在通知中心的选择器中,我有以下代码 ... //get the client list from the notification
...
//get the client list from the notification
[dictPopoverData setObject: [[notification userInfo] objectForKey:@"Client List"] forKey:@"Client List"];
//get the frame of the object launching the popover
popupCallerFrame = CGRectFromString([[notification userInfo] objectForKey:@"Caller Frame"]);
[self presentPopOver:CLIENT_LIST:YES:dictPopoverData];
...
那么在现在的流行音乐中我有这样一个:
- (void) presentPopOver : (int) popoverID : (BOOL) isTable : (NSMutableDictionary*) dictPopoverData {
if (self.myPopoverController != nil) {
[self.myPopoverController dismissPopoverAnimated:YES];
self.myPopoverController = nil;
}
CGRect launchFrame;
//init the popover
if (popoverID == CLIENT_LIST) {
ClientListPopover* vcClientList = [[ClientListPopover alloc] initWithStyle:UITableViewStylePlain];
vcClientList.arrDataSource = [dictPopoverData objectForKey:@"Client List"];
self.myPopoverViewController = vcClientList;
//set the launch frame
launchFrame = popupCallerFrame;
launchFrame.origin.x = launchFrame.origin.x;
launchFrame.origin.y = launchFrame.origin.y + 100.0;
} else if (popoverID == PA_LIST) {
PAListPopover* vcPAList = [[PAListPopover alloc] initWithStyle:UITableViewStylePlain];
vcPAList.strClientNumber = [dictPopoverData objectForKey:@"Client Number"];
self.myPopoverViewController = vcPAList;
//set the launch frame
launchFrame = popupCallerFrame;
launchFrame.origin.x = launchFrame.origin.x;
launchFrame.origin.y = launchFrame.origin.y + 100.0;
}
//init and display the popover controller
if (self.myPopoverController == nil) {
//add the self.myPopoverViewController
self.myPopoverController = [[UIPopoverController alloc] initWithContentViewController:self.myPopoverViewController];
//display the popover
[self.myPopoverController presentPopoverFromRect:launchFrame inView:self.view
permittedArrowDirections:UIPopoverArrowDirectionUp
animated:YES];
[self.myPopoverController setDelegate:self];
} else {
[self.myPopoverController dismissPopoverAnimated:YES];
self.myPopoverController = nil;
}
}
假设用户点击客户端按钮,通知被发送到AVC,弹出控制器中的一个UITable。然后,用户从表中选择一个客户机。再次向AVC发送通知,此时显示的客户端列表弹出框应被取消,PA列表弹出框应显示。似乎没有调用[self.myPopoverController dismissPopoverAnimated:YES]。我跟踪了它,它点击了那行代码,但什么也没发生,第一个弹出框仍然在屏幕上。你知道我做错了什么吗
编辑:我忘了提到我似乎无法将委托分配给self.myPopoverController。这可能就是为什么Disclease方法没有触发的原因
编辑:我在popover控制器初始化后添加了对委托的调用。这似乎没有什么不同。如果我在第一个popover的外面触摸,而不在里面触摸,它确实会消失,我可以跟踪该方法 那么,如果你点击按钮,是否不带你到else条件?或者,它会将您带到else条件,但dismissPopoverAnimated不会解除popOver,请在[self.myPopoverController dismissPopoverAnimated:YES]处放置断点;然后在控制台中打印po self.myPopoverController.delegate并检查该委托是否为零:dismissPopoverAnimated不是dismissing-如果我记录popover控制器委托,它就在那里-我跟踪了它,在第二次调用时它挂在displayPopoverFromRect调用上。该死。该错误与popover控制器无关…我在第二个视图控制器中输入了一个错误,导致了一个无休止的循环…如果你回来放-试着不要愚蠢作为答案,我会选择它:你知道我以前遇到过什么吗