代码之家  ›  专栏  ›  技术社区  ›  Madhup Singh Yadav

在未记录的警报中使用子视图

  •  2
  • Madhup Singh Yadav  · 技术社区  · 15 年前

    我问了一个类似的问题 here and got some answers,so first of all sorry for making you people storn once again.

    但这次我有个争论。首先我要展示我的代码

    显示警报{ uiAlertView*AlertView=[[uiAlertView alloc]initWithTitle:@“嘿!”消息:@“?”delegate:self cancelbuttonttitle:nil otherbuttonttitles:@“是”,@“否”,@“不知道EAXactly。”,nil]; [警报视图设置:101]; [警报视图显示]; } -(无效)将显示警报视图:(uialertview*)警报视图{ if(alertview.tag==101){ [[[alertview subview]objectatindex:2]背景颜色:【uicolor colorwithred:0.5绿色:0.0f蓝色:0.0f阿尔法:0.5f】; [[[alertview subview]objectatindex:3]后退背景色:[uicolor colorwithred:0.0 green:0.5f blue:0.0f alpha:0.5f]]; } } < /代码>

    我最后的警告看起来像

    现在我的困惑是, [alertview subview] 没有像某些人可能说的那样记录下来,但是alertview是 uiview的子类,它有一个名为 subview的属性。

    所以我使用的是超类的文档属性,这是绝对允许的。

    那么,如果此AlertView可能导致拒绝我的应用程序?(我不认为苹果会有任何理由说我在使用未注册或私有的API。外观和感觉也与AlertView相似。) 得到了一些答案,所以首先很抱歉让你的人再次麻烦。

    但这次我有个争论。首先我要展示我的代码

    - (void) showTheAlert{
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Hey!" message:@"?" delegate:self cancelButtonTitle:nil otherButtonTitles:@"Yes",@"No",@"Don't know eaxactly.",nil];
        [alertView setTag:101];
        [alertView show];
    }
    
    - (void)willPresentAlertView:(UIAlertView *)alertView{
        if(alertView.tag == 101){
            [[[alertView subviews] objectAtIndex:2] setBackgroundColor:[UIColor colorWithRed:0.5 green:0.0f blue:0.0f alpha:0.5f]];
            [[[alertView subviews] objectAtIndex:3] setBackgroundColor:[UIColor colorWithRed:0.0 green:0.5f blue:0.0f alpha:0.5f]];
        }
    
    }
    

    我最后的警告看起来像

    enter image description here

    现在我的困惑是, [alertView subviews] 没有像某些人所说的那样记录,但AlertView是 UIView ,其属性名为 subviews .

    所以我使用的是超类的文档属性,这是绝对允许的。

    那么,如果此AlertView可能导致拒绝我的应用程序?(我不认为苹果会有任何理由说我在使用未注册或私有的API。外观和感觉也与AlertView相似。)

    3 回复  |  直到 8 年前
        1
  •  4
  •   Brad Larson    15 年前

    按照Henrik的回复,在iPhone人机界面指南部分 "Designing an Alert" 他们说:

    尽管你可以选择 放置在警报中的按钮,a 双按钮警报通常是最常见的 有用,因为它最容易 用户可以在两个选项之间进行选择 选择。这很少是个好主意 用一个 按钮,因为这样的警报不能 为用户提供对 相反,它只能 显示信息并提供 关闭按钮。 包含以下内容的警报 三个或更多按钮明显 比两按钮警报更复杂, 如果可能的话应该避免。 在 事实上,如果你发现你需要 为用户提供两个以上的选择,您 应该考虑使用操作表 相反(参见使用行动表和 _156;设计行动表_157;了解更多 有关此类型视图的信息)。

    因为用户有时会响应 不仔细阅读警报, 确保提供适当的 默认选项。帮助指导 对这个选择不太关注的用户, 使浅色,右手 按下安全的默认选项。 例如,您可以选择 此按钮取消按钮,以帮助 用户避免无意中导致 危险的行动,否则你会成功的 表示最常见的响应,如果 产生的作用是 破坏性的

    以下指南描述了 在警报中配置按钮:

    • 在有两个按钮的警报中,左边的按钮总是 深色和按钮 右边永远不是深色。

    • 在两个按钮的警报中,该按钮提出了一个潜在的风险操作。 取消操作应该打开 右边和浅色。

    • 在两个按钮的警报中,建议采取良性行动, 取消操作应在 左侧(因此为深色)。

    • 在只有一个按钮的警报中,该按钮为浅色。

    您明显违反了警报视图中按钮的大小、形状、编号和颜色方面的准则(红色具有非常明确的含义,即破坏性操作,而不是确认)。即使苹果公司在审查中没有拒绝你的应用程序(他们通常会明显违反人机界面准则),这对你的用户来说也是非常混乱的。

    此外,为任何Apple提供的用户界面元素导航隐藏视图层次结构是一种非常糟糕的做法。视图层次结构是未记录的,并且经常更改。当人们升级到iPhoneOS3.0时,许多应用程序开始崩溃,因为这些应用程序对UI元素的子视图做了一些奇怪的事情,而这些元素在新的OS版本中发生了变化。苹果甚至在iPhoneOS3.0迁移文档中特别提到了这一点(我现在找不到)。

    由于这导致的问题,他们似乎已经取缔了这种做法,并因此拒绝了申请。即使他们不这样做,如果你这样做,也会对你的用户表示轻蔑,因为这意味着你不在乎你的应用程序是否会因将来的操作系统升级而中断。

        2
  •  6
  •   Henrik P. Hessel    15 年前

    苹果 iPhone Human Interface Guidelines 关于警报视图,请明确说明:

    警报出现的频率很低,这有助于用户认真对待它们。确保最小化应用程序显示的警报数,并确保每个警报都提供关键信息和有用的选择。 一般来说,尽量避免创建 :

    • 更新用户的任务 进展正常。 相反,考虑使用进度 查看或活动指示器 向 用户(描述了这些控件 _进度视图_和__活动 指标_)。

    • 请求确认 用户发起的操作。要确认用户发起的操作,即使是删除联系人等潜在风险的操作,您应该使用操作表(下面的“使用操作表”中描述)。

    • 通知用户错误或问题 他们对此无能为力。 尽管有必要使用警报来告诉用户 他们能解决的关键问题 更好地整合这些信息 如果可能,进入用户界面。 例如,而不是告诉用户 每次服务器连接失败, 显示上一次的时间 连接成功。

    所以,我的建议是,等待潜在拒绝的时间不值得你花时间。不要冒险。

        3
  •  3
  •   Kenny Winker    15 年前

    我很肯定会改变 UIAlertView 通过挖掘视图层次结构首先是一个不可能的,因为它 以非标准方式使用标准iPhone屏幕图像,可能导致用户混淆 第二,因为如果它们改变了视图层次结构,你的应用就会被破坏。

    我可能错了,我从来没有尝试过把这样的东西带到店里,但我的直觉告诉我不要冒险。

    你可以使用标准的uiactionsheet获得一个红色按钮,对吗?