重置文本时覆盖外观代理

Posted

技术标签:

【中文标题】重置文本时覆盖外观代理【英文标题】:Appearance Proxy overridden when resetting text 【发布时间】:2016-02-01 20:11:41 【问题描述】:

我正在使用 UIAppearance 代理设置我的 UI。我将我的 UITextfields 设置为具有如下自定义字体:

[[UILabel appearanceWhenContainedIn:[RDTextField class], nil] setTextColor:[UIColor rds_purple]];
[[UILabel appearanceWhenContainedIn:[RDTextField class], nil] setFont:[UIFont rds_ralewayWithSize:20.0]];

这非常有效,当我的文本字段出现在屏幕上时,它们具有正确的字体。但是,我使我的用户能够像这样对文本字段中的字符串进行洗牌:

- (IBAction)shuffleValuesButtonPressed:(id)sender 
    self.randomStringTextfield.text = [self randomString];

发生这种情况时,字体会从我的自定义字体变为默认的黑色字体。为什么会发生这种情况,让我的新字符串成为我在外观代理中设置的自定义字体的解决方案是什么?

【问题讨论】:

【参考方案1】:

根据 Apple 开发者文档:

当视图进入窗口时,ios 会应用外观更改,它不会更改已经在窗口中的视图的外观。要更改当前位于窗口中的视图的外观,请从视图层次结构中删除该视图,然后将其放回原处。

因此,此解决方案的工作原理是删除所有内容并将其重新添加,但可能有更好的方法:

- (IBAction)shuffleValuesButtonPressed:(id)sender 
    self.randomStringTextfield.text = [self randomString];
    [self refreshViews];


- (void)refreshViews 
    for (UIWindow *window in [UIApplication sharedApplication].windows) 
        for (UIView *view in window.subviews) 
            [view removeFromSuperview];
            [window addSubview:view];
        
    

【讨论】:

以上是关于重置文本时覆盖外观代理的主要内容,如果未能解决你的问题,请参考以下文章

ABPeoplePicker:重置自定义导航栏外观

如何将透明的“大标题”UINavigationBar 重置为默认外观设置?

移动端页面默认样式重置

在视图控制器中重置导航栏的外观

httpClient 在从 azure 反向代理调用 https 连接时抛出连接重置

如何重置或覆盖 IE CSS 过滤器?