2013-02-21 72 views
0

我們是否允許修改默認iOS控件的子視圖,如UIDatePicker?我的應用程序有一個簡約/平面的用戶界面,默認的日期選擇器不符合該風格。我能找到修改它的唯一辦法是通過其子視圖迭代和隱藏添加陰影,等的,就像這樣:我可以修改默認iOS控件的子視圖嗎?

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

這是允許還是會得到我的應用程序被拒絕?我並沒有真正搞亂控制或其功能,只是它的外觀。

+1

不建議這樣做,因爲將來蘋果可能會改變UIDatePicker中的某些內容,並且您的代碼可能會崩潰/或顯示意外的行爲。 – iDev 2013-02-21 00:53:35

回答

2

雖然您可能不會立即被拒絕,但您可能會在控件的子視圖更改時看到意外的行爲。處理自己的自定義控件或者在公共API中尋找接近你想要的外觀的方法可能是一個更好的主意。

0

不建議改變通過API公開的內容。未來,蘋果可能會刪除特定索引的子視圖。最好避免這種方法。嘗試根據UI或實現來尋找其他選項。

1

它不是一個真正的「私人API」—它完全記錄在SDK中。但是,您所依靠的行爲是而非記錄(即該子視圖0是您要隱藏的那個),因此您需要小心。

你的代碼有兩個潛在的問題:

  • 它會隱藏錯誤的觀點,如果順序發生變化(檢查視圖類常用來防止這種有點)
  • 它會崩潰,如果選擇器沒有子視圖(這看起來不太可能發生;當您訪問視圖時(例如索引6),更是一個問題)。

還有兩個你需要做的額外內容:

  • 保留的東西你這樣做容易在未來的OS版本打破名單。
  • 檢查事情仍然在iOS beta版中工作,並且這樣做提前
+0

感謝您的詳細解答。我可能不得不最終這樣做,因爲我根本沒有想法如何製作完全自定義的日期選擇器控件。 – bmueller 2013-02-21 05:12:22

+0

有一個問題 - 你說「檢查視圖類通常用於防止這個」。你是什​​麼意思? – bmueller 2013-02-21 06:21:31

+0

例如,獲取UIWebView的滾動視圖(在較舊的iOS版本上)可以通過迭代子視圖並返回第一個是UIScrollView來完成。隱藏「陰影」可以通過遍歷UIScrollView的子視圖並隱藏UIImageView(這也隱藏滾動指示器,但可能是你想要的)來完成。雖然這可能會在操作系統升級時失敗,但不會崩潰或隱藏網頁內容。 – 2013-02-21 20:06:12

相關問題