如何在segue中初始化UIButton的titleLabel字体?

时间:2013-12-18 12:41:06

标签: ios uibutton initialization uilabel segue

我有两个UIViewController s vc1vc2。第二个视图控制器具有UIButton属性originalButton

在从vc1vc2的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];

    ...

}

2 个答案:

答案 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并添加*来制作指针。