重置文本时覆盖外观代理

时间:2016-02-01 20:11:42

标签: ios objective-c uitextfield uiappearance

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

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

这很有效,当我的文本字段显示在屏幕上时,它们的字体正确。但是,我允许我的用户随机播放文本字段中的字符串,如下所示:

<span>

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

1 个答案:

答案 0 :(得分:0)

根据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];
        }
    }
}