【问题标题】: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];
}

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

【问题讨论】:

    标签: ios objective-c uitextfield uiappearance


    【解决方案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];
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多