2012-04-03 83 views
4

我試圖做一些與XIBs fanciness,包括想要以某種方式獲取和存儲從xib加載的圖像的路徑。爲了做到這一點,我做了一些類別,並調用一些方法來覆蓋所有的UIImage構造函數,以在調用它們的父構造函數之前保存它們的路徑。從XIB創建UIImage如何構建?

但由於蘋果公司的黑盒子BS他們所有的東西XIB,絕對沒有暴露的構造函數的UIImage似乎當我創建通過[UIViewController的initWithNib ...]一個UIImageView到被調用。

有沒有人知道函數調用發生了什麼,或者他們如何做到這一點?我無法找到任何揭露initWithNib在幕後實際做什麼的信息。

謝謝!

編輯: 如果您處於類似的情況,您可以嘗試使用自動填充圖像路徑的accessibilityLabel/accessibilityHint。唯一的問題是需要啓用可訪問性或者這些值爲零。

+1

爲什麼不只是將UIImage或UIImageView子類化,並將XIB中的對象設置爲新的'EliImage'或'EliImageView'對象,然後就可以做各種瘋狂的事情。 – 2012-04-03 22:48:43

+0

不幸的是,我仍然無法從中獲得圖像路徑。 – Eli 2012-04-03 23:33:48

+0

@Eli如果圖像可以從xib載入,那麼它們在你的包中,對不對?我認爲這是你的圖像路徑的更直線。 – danh 2012-04-04 00:06:38

回答

2

我知道從Nib構造的對象根據NSCoding協議被取消存檔;在這種情況下,您需要覆蓋initWithCoder:

您可以使用swizzling替換UIImageView的initWithCoder:方法,然後窺探以查看圖像名稱或路徑在任何編碼器的密鑰中是否可用。這可能比黑客UIImage本身更有效,因爲我們知道UIImageView可能會使用您無法訪問的自定義子類。

+0

hi benzado!我試圖做到這一點,任何想法如何獲得initWithCoder上的圖像名稱?謝謝 – Frade 2015-03-24 12:19:14

1

initWith...方法是指以編程方式創建UIImageView對象。

聽起來就像你想捕捉事物,因爲它們是從XIB文件實例化的。這將是父類UIView[initWithCoder:]方法。

由於UIView documentation says

的initWithCoder: - 如果從 Interface Builder的筆尖文件加載你的看法和你的看法需要自定義 初始化實現此方法。

1

你們都很接近 - 我試着用UIImageView這樣做,它適用於initWithCoder,因爲你們都暗示。但是,由於某種原因UIImage沒有得到initWithCoder,而是使用initWithCGImageStored:(CGImageRef)cgImage scale:(CGFloat)scale orientation:(UIImageOrientation)orientation

如果當我真正從我這裏得到出路,我會在這裏發佈它。感謝您的幫助,男士們。

+0

你有沒有想過這個想法? – Codezy 2013-12-10 05:54:12

+0

我最終不幸潛入XML中。 – Eli 2014-01-26 01:30:59