使用Alert未记录的子视图

Mad*_*dav 2 iphone objective-c

我在这里问了一个类似的问题并得到了一些答案,所以首先很抱歉让人们再次烦恼.

但这次我有一个争论.首先,我将展示我的代码

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

}
Run Code Online (Sandbox Code Playgroud)

我的最终警报看起来像

在此输入图像描述

现在我的困惑是,[alertView subviews]没有记录,有些人可能会说,但alertview是一个子类UIView,有一个属性叫subviews.

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

那么,如果此警报视图可能导致我的应用程序被拒绝?(我认为苹果没有任何基础可以说我使用的是无证件或私人API.外观和感觉也与alertview相似.)

Hen*_*sel 6

有关警报视图的苹果iPhone人机界面指南明确指出:

警报出现的频率很低,可以帮助用户认真对待.务必>最大限度地减少应用程序显示的警报数量,并确保每个警报提供>关键信息和有用的选择.通常,尽量避免创建以下警报:

  • 更新正在进行的任务的用户.相反,请考虑使用进度视图或活动指示器向用户提供与进度相关的反馈(这些控件在"进度视图"和"活动指示器"中进行了描述).

  • 要求确认用户启动的操作.要获得用户启动的操作的确认,即使是可能存在风险的操作(例如删除联系人),也应使用操作表(在"使用操作表"中进行了描述).

  • 告知用户他们无能为力的错误或问题.虽然可能需要使用警报来告诉用户他们无法修复的关键问题,但如果可能的话,最好将这些信息集成到用户界面中.例如,不是每次服务器连接失败时都告诉用户,而是显示上次成功连接的时间.

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