【发布时间】:2013-12-18 12:41:06
【问题描述】:
我有两个UIViewControllers vc1 和vc2。第二个视图控制器有一个UIButton 属性originalButton。
在从vc1 到vc2 的转场中,我复制了originalButton 用于动画目的(buttonCopy)。问题是buttonCopy 的titleLabel 的字体不是originalButton(标准UIButton 字体)。
显然这是因为在segue中originalButton的titleLabel还没有完全初始化。
在复制按钮之前调用NSLog(@"%@",originalButton.titleLabel.font) 的副作用是为titleLabel 设置了正确的字体,随后buttonCopy 将以正确的字体显示。
但是使用NSLog() 调用来初始化按钮的titleLabel 字体似乎很荒谬。必须有另一种方法来实现这一目标。怎么样?
编辑:这是我在自定义 segue 中复制原始按钮的代码:
- (void)perform {
...
// load view to initialize button
[destinationViewController view];
// the following line fixes the problem due to side effects
NSLog(@"%@",destinationViewController.originalButton.titleLabel.font);
// copy buttons
// (using NSKeyedArchiver because UIButton does not support the copy method)
NSData *archivedData = [NSKeyedArchiver archivedDataWithRootObject: destinationViewController.originalButton];
NSData *copy = [archivedData copy];
UIButton *buttonCopy = [NSKeyedUnarchiver unarchiveObjectWithData:copy];
...
}
【问题讨论】:
-
您是否在
-prepareForSegue:sender:内进行复制?你能展示你的代码吗? -
不,我在(自定义)segue 的
-perform方法中制作副本。
标签: ios uibutton initialization uilabel segue