我可以修改默认iOS控件的子视图吗?

时间:2013-02-21 00:51:20

标签: ios objective-c xcode

我们是否可以修改默认iOS控件的子视图,比如UIDatePicker?我的应用程序具有极简主义/平面UI,默认日期选择器与该样式不匹配。我能找到修改它的唯一方法是遍历其子视图并隐藏添加阴影等的子视图,如下所示:

UIView *background = (UIView *)[[self pickerViews].subviews objectAtIndex:0];
background.hidden = YES;

这是允许的还是会让我的应用被拒绝?我实际上并没有搞乱控制或其功能,只是它的外观。

3 个答案:

答案 0 :(得分:2)

虽然您可能不会立即被拒绝,但是当控件的子视图发生更改时,您可能会在将来看到意外行为。处理自己的自定义控件或在公共API中找到接近所需外观的方法可能是一个更好的主意。

答案 1 :(得分:1)

它不是真正的“私有API” - 它完全记录在SDK中。但是,您依赖于 not 记录的行为(即子视图0是您要隐藏的行为),因此您需要小心。

您的代码有两个潜在问题:

  • 如果订单发生变化,它会隐藏错误的视图(检查视图类通常用来防止这种情况)
  • 如果选择器没有子视图,它会崩溃(这似乎不太可能发生;当您访问例如索引6的视图时,这会更加严重。)

您还需要做两件事:

  • 列出您在未来的操作系统版本中可能会中断的任何内容。
  • 检查iOS测试版中是否仍然可以使用早期

答案 2 :(得分:0)

不建议更改未通过API公开的内容。将来苹果可能会删除该特定索引的子视图。最好避免这种方法。尝试在UI或实现方面寻找其他选项。