单击 UIActionSheet 中的按钮启动 UIPopover

Posted

技术标签:

【中文标题】单击 UIActionSheet 中的按钮启动 UIPopover【英文标题】:Launch a UIPopover on click of a button inside UIActionSheet 【发布时间】:2015-08-27 05:16:33 【问题描述】:

在我的表格视图中向左滑动一行时,我有两个 UITableViewRowAction 按钮(删除和更多)。点击 More 按钮后,我将展示一个 UIActionSheet,其中包含两个名为 Edit NickNameEdit Photo 的按钮,如下所示:

现在我正在尝试通过单击编辑昵称来启动 UIPopover。为此,我使用以下代码:

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
NSString *buttonTitle = [actionSheet buttonTitleAtIndex:buttonIndex];    

    if ([buttonTitle isEqualToString:@"Edit NickName"]) 
        NSLog(@"Edit NickName");
        UIStoryboard *secondStoryBoard = [UIStoryboard storyboardWithName:@"SplitView" bundle:nil];
        EditNickNameViewController *popVC = [secondStoryBoard instantiateViewControllerWithIdentifier:@"EditNickNameViewController"];

        popover = [[UIPopoverController alloc] initWithContentViewController:popVC];
        popover.delegate=self;
        popover.popoverContentSize = CGSizeMake(600, 300);
        [popover presentPopoverFromRect:CGRectMake(20,20, 0, 0) inView:self.view
           permittedArrowDirections:0 animated:YES];



    
    if ([buttonTitle isEqualToString:@"Edit Image"]) 
        NSLog(@"Edit Image");
    

上面的代码在任何普通 UIButton 的 IBAction 中都能很好地工作,但在这种情况下它没有显示任何弹出框。

上面的代码行在运行时被执行,但是什么都没有发生。

谁能告诉我是否可以做这样的事情,或者我在这里做错了什么。如果不可能,请向我建议一种替代方法,以替代如何在单击 Edit NickName 按钮时启动弹出窗口之类的内容。

提前致谢!

【问题讨论】:

您不应该通过0 获得允许的方向,并且您当然不应该通过零大小的矩形来呈现。为什么不传递单元格的矩形和视图? @rmaddy 我正在传递0 以获得允许的方向,因为我不想要任何相关的方向。而且我尝试过更改矩形的大小,但仍然无法正常工作。无论如何,相同的代码在 UI 中的普通按钮的操作中工作。 可能问题在于20,20 原点位于导航栏下方。 尝试了所有矩形参数的组合。但是,它不起作用。我猜问题出在 UIActionsheet 按钮上。 不要使用clickedButtonAtIndex 委托,而是尝试使用didDismissWithButtonIndex: 委托方法。问题可能是在关闭操作表之前尝试显示弹出框。 【参考方案1】:

在主队列中显示您的弹出框;

dispatch_async(dispatch_get_main_queue(), ^
       [popover presentPopoverFromRect:CGRectMake(20,20, 0, 0) inView:self.view
           permittedArrowDirections:0 animated:YES];
    );

【讨论】:

OP 已经在使用主队列。操作表委托方法总是在主队列中调用。

以上是关于单击 UIActionSheet 中的按钮启动 UIPopover的主要内容,如果未能解决你的问题,请参考以下文章

Swift:如何通过单击按钮 UITableVieCell 创建 UIActionSheet

如何处理 UIActionSheet 的转换

iPhone UIAlertView UIActionSheet tableView

UIActionSheet buttonIndex

长按 UITextView 中的电话号码后,不会出现来自 UIActionSheet 的取消按钮

UIActionSheet 事件未触发