通过弹出框 didselcet 关闭模态视图
Posted
技术标签:
【中文标题】通过弹出框 didselcet 关闭模态视图【英文标题】:Dismiss Modal View through popover didselcet 【发布时间】:2013-01-05 07:06:00 【问题描述】:我的应用程序中有一个 splitView。我从 splitview 的 detailview 中显示了一个单击按钮的模态。在该模态中,我打开了包含 splitview 的 rootview 控制器(包含 tableview)的弹出窗口。
现在我想关闭 popover 的 tableview 的 didSelect 上的模态视图。但它不会关闭。 我对此进行了很多搜索并尝试过,但找不到任何解决方案。
我试过的代码如下:
//DetailView (Presented ModalView).m
-(IBAction)popOverBtnPressed:(id)sender
LeftSideVCViewController *popUp=[[LeftSideVCViewController alloc] initWithNibName:@"LeftSideVCViewController" bundle:nil];
popView = [[UIPopoverController alloc]initWithContentViewController:popUp];
popView.delegate =self;
[popView setPopoverContentSize:CGSizeMake(300, 700)];
[popView presentPopoverFromRect:CGRectMake(150,5,20,40) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
-(void)dismissModal
[self dismissViewControllerAnimated:YES completion:nil];
// LeftSideView.m
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
DetailView *d=[[DetailView alloc]init];
[d dismissModal];
// GridView.m
从视图中呈现 DetailView (GridView)
-(IBAction)Grid_buttonPressed:(id)sender
DetailView *rd=[[DetailView alloc]initWithNibName:@"DetailView" bundle:nil];
rd.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentModalViewController:rd animated:YES];
如何做到这一点? 谢谢。
【问题讨论】:
您在展示和关闭时创建了不同的 ModelView 实例,这就是为什么它没有关闭它,因为在关闭它时它与您展示的 modelView 实例不同。 【参考方案1】:通过编写DetailView *d=[[DetailView alloc]init]
,您可以实例化另一个DetailView 实例。
在这种情况下,出路是为 LeftSideView 创建一个委托
上面某处:
DetailView *instanceDV = [DetailView new];
LeftSideView *instanceLSV = [LeftSideView new];
instanceLSV.delegate = instanceDV;
然后:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
if([self.delegate respondsToSelector:@selector(dismissModal)])
[self.delegate dismissModal];
【讨论】:
感谢您的回复。但是如何创建 LeftSideView 的委托? 在 LeftSideView.h 中添加一个属性,如下所示:@property (assign) NSObject *delegate;【参考方案2】:您正在创建 DetailView d=[[DetailView alloc]init]
的新实例。尝试访问弹出框控制器并将其关闭。
【讨论】:
如何在左侧视图中访问该弹出框?? 你能访问你的根控制器,即拆分视图控制器,然后尝试 splitviewcontroller.detailcontroller。【参考方案3】:这是一种关闭通过其主弹出框模态呈现的 UISplitViewController 的方法。不确定这是否是确切的问题,但可能对某些人有帮助。 从主视图本身(弹出视图):
//get the detail view
MyDetailViewClass *detailView = (MyDetailViewClass *)[[self.splitViewController.viewControllers lastObject] topViewController];
//dismiss the master popover
[detailView.masterPopoverController dismissPopoverAnimated:YES];
//dismiss the whole view
[detailView.navigationController dismissViewControllerAnimated:YES completion:nil];
【讨论】:
以上是关于通过弹出框 didselcet 关闭模态视图的主要内容,如果未能解决你的问题,请参考以下文章
如何通过单击外部来关闭 Twitter Bootstrap 弹出窗口?