我有两个UIViewController
s vc1
和vc2
。第二个视图控制器具有UIButton
属性originalButton
。
在从vc1
到vc2
的segue中,我为动画目的制作了originalButton
的副本(buttonCopy
)。问题是buttonCopy
的titleLabel有另一种字体而不是originalButton
(标准UIButton
字体)。
显然这是因为在segue中originalButton
的titleLabel还没有完全初始化。
在复制按钮之前调用NSLog(@"%@",originalButton.titleLabel.font)
会产生副作用,即为titleLabel设置了正确的字体,随后buttonCopy
将显示正确的字体。
但是使用NSLog()
调用来初始化按钮的titleLabel字体似乎很荒谬。必须有另一种方法来实现这一目标。怎么样?
编辑:这是我在自定义区域中复制原始按钮的代码:
- (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];
...
}
答案 0 :(得分:1)
您可以通过以下声明替换NSLog
的电话:
[NSString stringWithFormat:@"%@", destinationViewController.originalButton.titleLabel.font];
这对加载字体有同样的效果,但它不会输出任何日志消息。
答案 1 :(得分:0)
您可以尝试复制-prepareForSegue:sender:
上的按钮,如下所示:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
id vc2 = [segue destinationViewController];
[vc2 setOriginalButton:[vc1Button copy]];
}
如果已知类,您可以用VC类名替换id
并添加*
来制作指针。