通过弹出框 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 弹出窗口?

从 viewDidAppear 呈现时,模态弹出框控制器不显示其内容

layer弹出层里面的按钮怎么关闭当前弹出框