簡體   English   中英

在Objective-C中復制UI元素

[英]Copy UI element in Objective-C

我正在嘗試自定義iPhone的UIImagePickerController。 我可以修改默認按鈕(接受和取消)以及添加更多按鈕。 但是,當嘗試使自定義按鈕的外觀和默認iPhone的外觀相似時,我遇到了麻煩。 起初,我認為可以通過以下代碼獲得然后克隆默認按鈕作為我的模板

UIButton *cancelButton = [[[[[[[[[[[[[[[[self.view subviews] objectAtIndex:0]
                            subviews] objectAtIndex:0]
                            subviews] objectAtIndex:0]
                            subviews] objectAtIndex:0]
                            subviews] objectAtIndex:2]
                            subviews] objectAtIndex:0]
                            subviews] objectAtIndex:1]
                            subviews] objectAtIndex:1];


UIButton *anotherButton = [cancelButton copy];

但是由於我最近才知道NSObject及其子類在默認情況下不實現NSCopying協議,因此它不起作用。

我想知道有什么方法可以-復制UI元素,然后按我的意願對其進行修改-創建具有Apple外觀的自定義按鈕

如果要復制任何UIView,請將其放在nib文件中,並根據需要加載多次。

另一種選擇是存檔現有視圖,然后取消存檔。 請參閱NSKeyedArchiver類。

id theButton;  //whatever way you obtain this...
id copyOfTheButton = [NSKeyedUnarchiver unarchiveObjectWithData:
                     [NSKeyedArchiver archivedDataWithRootObject: theButton]];

有沒有簡單的方法來復制一個Objective-C的對象沒有實現 NSCopying (除非你使用使用NSCoding的NSResponder類的建議,在這種情況下有。)NSCopyObject()但是這也許是所有最危險的功能基礎知識(請參閱NSCopyObject()被認為對我對此瘋狂功能的想法有害 )。

您的選擇是安全或危險的。 安全的方法是只在自己的代碼中復制元素的外觀。 這是乏味的,但是通常是可以實現的。 危險的方法是對元素的類和接口進行反向工程,然后嘗試創建自己的實例(使用alloc / init)。 這可能會起作用,但可能不會起作用,並且可能會在操作系統版本之間中斷,但可能會更快地為您帶來更好的結果。 就個人而言,我傾向於盡可能地手動重建原始元素。 通常,Photoshop是該工作的重要部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM