【问题标题】:Dismiss Modal View through popover didselcet通过弹出框 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 实例不同。

标签: iphone objective-c ios xcode presentmodalviewcontroller


【解决方案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];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    相关资源
    最近更新 更多