操作表未在iPad上显示“取消”按钮

时间:2010-05-03 19:12:09

标签: iphone ipad uiactionsheet

在iphone上,此代码显示取消按钮:

- (IBAction)buttonPressed
{
    UIActionSheet *actionSheet = [[UIActionSheet alloc]
                                  initWithTitle:@"Are you sure?"
                                  delegate:self 
                                  cancelButtonTitle:@"No way!"
                                  destructiveButtonTitle:@"Yes, I'm sure!"
                                  otherButtonTitles:nil];
    [actionSheet showInView:self.view];
    [actionSheet release];  
}

但是在iPad上,只有破坏性按钮显示 有什么问题?

6 个答案:

答案 0 :(得分:38)

这是UI design and guidlines的一部分。在“行动表”下,他们说:

  

不要包含取消按钮,   因为人们可以在外面拍打   popover以关闭操作表   没有选择其中一个   的替代品。

看起来像SDK hide the button for you on purpose。我不确定是否有解决方案,但也许您可以添加自己的按钮并将cancelButtonIndex设置为匹配。或者您可以切换到UIAlertView

答案 1 :(得分:4)

在iOS 5中,这对我有用。

- (void)manualAddModel
{
    UIActionSheet *popupQuery = [[UIActionSheet alloc] initWithTitle: @"Select Equipment Type"
                                                            delegate: self
                                                   cancelButtonTitle: @"Cancel"
                                              destructiveButtonTitle: nil
                                                   otherButtonTitles: @"Add Boiler", @"Add Furnace",  nil];

    popupQuery.actionSheetStyle = UIActionSheetStyleDefault;
    [popupQuery addButtonWithTitle:@"Cancel"];
    [popupQuery showInView:self.view];
}


- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 0)
    {
        NSLog(@"Add Boiler");
    }
    else if (buttonIndex == 1)
    {
        NSLog(@"Add Furnace");
    }
    else if (buttonIndex == 2)
    {
        NSLog(@"Cancel Button Clicked");
    }
}

通常情况下,在操作表外部点击将在iPad中实现相同的目的。

答案 2 :(得分:2)

在iOS 4.2.1中,您可以像普通按钮一样手动添加自己的“取消”按钮:

[actionSheet addButtonWithTitle:@"Cancel"];

然后设置:

actionSheet.cancelButtonIndex = <your index>;

您将无法获得红色取消按钮,但根据您的UIActionSheetStyle设置,您将获得蓝色或黑色取消按钮。无论如何,它与普通按钮非常清晰,并且可以正确取消。

请注意,在我的情况下,我正在弹出窗口控制器中显示一个操作表,您的结果可能会因其他方案而异。

答案 3 :(得分:1)

我能够通过设置actionSheetStyle来解决这个问题:

actionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque;

UIActionSheetStyleBlackTranslucent也有效。我正在从模态视图控制器显示动作表,我认为这在技术上并不像指南所说的那样是“popovercontroller”但是当它出现在模态视图顶部时,没有看到动作表上的“取消”按钮看起来不正确。所有用户看到的都是一个可怕的红色按钮,没有可见的选择。

也许我可以将模态视图控制器更改为popovercontroller但是它不会是模态的,它需要它。

- 更新 -

它持续很有趣但在iOS 4.2中不再适用 我转而使用UIAlertView而不是UIActionSheet 我不再得到一个很酷的红色按钮,但它完成了工作。

答案 4 :(得分:1)

当我尝试在View中显示另一个模态视图下的ActionSheet时遇到了同样的问题,例如这种观点是看不见的。虽然View不是nil看起来像框架中的深层,但是当它没有显示时就意味着它。

我通过设置不同的UIModalPresentationStyle modalPresentationStyle属性解决了这个问题,因此视图变得可见。

view.modalPresentationStyle = UIModalPresentationFormSheet;

答案 5 :(得分:1)

根据iOS标准,在iPad中显示时,UIActionSheet中不显示“取消”按钮,因为只需点击ActionSheet区域外的任何位置即可取消(隐藏)UIActionSheet。如果iPhone UIActionSheet将包含取消按钮。

请参阅此链接以获取更多信息UIActionSheet Cancel button in iPad