2010-12-16 62 views
12

我注意到,当我从iPhone主屏幕删除应用程序时,出现的警报视图显示了左侧的删除按钮和右侧的取消。但是,当我使用UIAlertView在我的应用程序中构建删除功能时,这些按钮似乎只在左侧显示为取消,而在右侧显示为删除。更改UIAlertView中取消按钮的位置?

我想让我的应用与操作系统保持一致,但我无法弄清楚如何使取消按钮首先出现。有人知道吗?

UIAlertView *alert = [[UIAlertView alloc] 
         initWithTitle:@"Delete Song" 
         message:@"Are you sure you want to delete this song? This will permanently remove it from your database." 
         delegate:self 
         cancelButtonTitle:@"Cancel" 
         otherButtonTitles:@"Delete", nil]; 

我试过设置alert.cancelButtonIndex = 1,但是没有任何效果。

回答

4

Apple在主屏幕上使用警报视图的一个可能原因是它曾经要求用户对他们正在移除的应用程序进行评分(不再是)。他们可能会将取消按钮变成浅色,因为这被认为是破坏性行为(删除应用程序及其数据)。

我想你可以颠倒标题(cancelButtonTitle:@"Delete" otherButtonTitles:@"Cancel", nil)并处理对这些按钮的点击(不知道苹果是否也这样做)。虽然这会有些尴尬;如何使用动作表来代替?

+0

嗯,你知道OS的其他部分是什么标准吗?我想不出在哪里寻找这个的其他例子。无论如何,如果从主屏幕删除应用程序使用非标准设置,那么我不需要匹配。 – arlomedia 2010-12-16 02:02:14

+0

@arlomedia:我还没有看到任何其他删除警报。 SMS和日历提醒都将其取消(关闭)按钮放置在左侧,就像SDK一样。 AFAIK,其他任何地方都会删除某些内容(照片,联系人,日历事件,备忘录,iPod播放列表)使用操作表单。 – BoltClock 2010-12-16 02:10:05

+0

好的,我会就这样离开它。谢谢(你的)信息。 – arlomedia 2010-12-16 04:38:20

52

啊,我只是想出了如何改变这一点。该cancelButtonTitle参数是可选的,所以你可以在任何你想要的位置添加自定义按钮,然后指定,作为取消按钮,就像这样:

UIAlertView *alert = [[UIAlertView alloc] 
         initWithTitle:@"Delete Song" 
         message:@"Are you sure you want to delete this song? This will permanently remove it from your database." 
         delegate:self 
         cancelButtonTitle:nil 
         otherButtonTitles:@"Delete", @"Cancel", nil]; 
alert.cancelButtonIndex = 1; 

这使删除按钮的左侧和取消按钮上右键并突出显示“取消”按钮。

+3

+1尼斯,绝对是苹果对我的建议意图。 – BoltClock 2010-12-16 05:44:00

+0

我以为我疯了,直到我看到这个。我尝试使用@“取消”作为取消按钮,@“YES”作为其他按钮标题,但buttonIndex 0取消按钮。除了苹果公司的一个bug之外,我真的不能把它看成是什么东西,但我是谁来质疑我无法理解的东西?这种方法虽然完美,但谢谢! – FrostyL 2013-10-16 19:27:32

+4

我发现这不再适用于iOS 8.3(在模拟器中),但在iOS 7.1上正常工作。尽管事实上苹果的一些警报仍然会*在右边放置“取消”,甚至在8.3。 (我想知道他们是怎么做到的!) – 2015-04-22 19:29:52