如何在 segue 中初始化 UIButton 的 titleLabel 字体?
Posted
技术标签:
【中文标题】如何在 segue 中初始化 UIButton 的 titleLabel 字体?【英文标题】:How to initialize a UIButton's titleLabel font in a segue? 【发布时间】:2013-12-18 12:41:06 【问题描述】:我有两个UIViewController
s 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
方法中制作副本。
【参考方案1】:
您可以用以下语句替换对NSLog
的调用:
[NSString stringWithFormat:@"%@", destinationViewController.originalButton.titleLabel.font];
这对加载字体有同样的效果,但不会输出任何日志消息。
【讨论】:
【参考方案2】:您可以尝试像这样复制-prepareForSegue:sender:
上的按钮:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
id vc2 = [segue destinationViewController];
[vc2 setOriginalButton:[vc1Button copy]];
如果类是已知的,您可以用 VC 类名替换 id
并添加一个 *
来创建一个指针。
【讨论】:
这不起作用,因为即使在 执行 segue 之前(即在调用-perform
之前)调用了 -prepareForSegue
方法。当按钮的 titleLabel 尚未在 -perform
方法中初始化时,之前尝试相同的事情是没有意义的。
-perform
在 VC1 还是 VC2 中?
既不是也不是。它在自定义 segue 类中(见上文)。以上是关于如何在 segue 中初始化 UIButton 的 titleLabel 字体?的主要内容,如果未能解决你的问题,请参考以下文章
ios - 将一个 UIButton 连接到 2 个 segues
由于 UIButton segue,如何切换 UITabBars?
如何通过 segue 到下一个 ViewController 使“查看全部”按钮显示数据?