繁体   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