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

Objective c 正在未记录的警报中使用子视图,objective-c,iphone,Objective C,Iphone,我问了一个类似的问题并得到了一些答案,所以首先,很抱歉再次让你们感到麻烦 但这次我有一个论点。首先,我将展示我的一段代码 - (void) showTheAlert{ UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Hey!" message:@"?" delegate:self cancelButtonTitle:nil otherButtonTitles:@"Yes",@"No",@"Don't know eaxac

我问了一个类似的问题并得到了一些答案,所以首先,很抱歉再次让你们感到麻烦

但这次我有一个论点。首先,我将展示我的一段代码

- (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]];
    }

}
我的最后警报看起来像

现在我感到困惑的是,
[alertView subviews]
并没有像一些人所说的那样被记录下来,但是alertView是
UIView
的一个子类,它有一个名为
subviews
的属性

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


那么这个alertview是否会导致我的应用被拒绝?(我不认为苹果会有任何理由说我在使用未记录的api或私有api。外观和感觉也与alertview相似。)

我相当肯定,通过挖掘视图层次结构来改变UIAlertView是不可能的。首先,因为它“以非标准方式使用标准iPhone屏幕图像,可能会导致用户混淆”,其次是因为如果它们更改了视图层次结构,您的应用程序将被破坏

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

您可以使用标准的UIActionSheet获得一个红色按钮,不是吗?

苹果关于警报视图明确指出:

警报出现的频率不高有助于用户认真对待警报。请确保>最小化应用程序显示的警报数量,并确保每一个警报都提供>关键信息和有用选择。通常,请尽量避免创建以下警报:

  • 向用户更新正在执行的任务 进展正常。 相反,考虑使用进度 查看或删除活动指示器以 提供与进度相关的反馈给 用户(对这些控件进行了描述 在“进度视图”和“活动”中 指标”)

  • 请求确认 用户发起的操作。要确认用户发起的操作,即使是删除联系人等潜在风险的操作,也应使用操作表(在“使用操作表”中介绍)。

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


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

按照Henrik的回答,在iPhone人机界面指南部分,他们说:

虽然你可以选择 要放置在警报中的按钮 双按钮警报通常是最常见的 这很有用,因为它对用户来说是最简单的 用户可以在两个选项中进行选择 这很少是个好主意 使用单个 按钮,因为这样的警报无法执行 为用户提供对 相反,它只能 显示信息并提供 “解除”按钮。包含 三个或三个以上的按钮非常重要 比两个按钮的警报更复杂, 如有可能,应避免使用。中 事实上,如果你发现你需要 您可以为用户提供两个以上的选择 应考虑使用行动单 相反(参见“使用行动表”和 “设计行动表”了解更多信息 有关此类型视图的信息)

因为用户有时会对 没有仔细阅读的警报, 确保提供适当的 默认选择。以帮助指导 对这一选择漠不关心的用户, 把灯调成浅色,右手边 按钮选择安全的默认选项。 例如,您可以选择 此按钮为“取消”按钮,以提供帮助 用户避免在无意中造成错误 危险的行动,否则你会成功的 如果需要,表示最常见的响应 由此产生的行动并非如此 破坏性的

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

  • 在具有两个按钮的警报中,左侧的按钮始终为 深色的和按钮上的按钮 权利从来都不是黑色的

  • 在建议潜在危险操作的双按钮警报中,按钮 这将取消应启用的操作 右边是浅色的

  • 在建议良性操作的两个按钮警报中 取消操作应在 左边(因此是深色的)

  • 在具有单个按钮的警报中,按钮为浅色
你明显违反了警告视图中按钮的大小、形状、数量和颜色的规定(红色很明显是一种破坏性行为,而不是确认)。即使苹果没有拒绝你的审查应用程序(他们倾向于拒绝你的审查应用程序,因为它明显违反了人机界面规定),这会让您的用户非常困惑

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

由于这导致的问题,他们似乎已经镇压了这种做法,并因此拒绝了应用程序。即使他们没有这样做,如果你这样做,也表明你对用户的蔑视,因为这意味着你这样做了