UITextView字体大小未更新

时间:2013-12-03 21:54:55

标签: ios iphone objective-c uitextview

我在UITextView内有一个UIViewController,其中包含一些按钮:其中两个按钮用于缩放UITextView中包含的文字。 defaultFontSize初始化了viewDidLoad()

这些按钮与IBAction相关联......

- (IBAction)zoomIn:(id)sender {
    if(defaultFontSize < 60) {
        defaultFontSize = defaultFontSize + 2;
        [theContent setFont:[UIFont systemFontOfSize:defaultFontSize]];
    }
}

/* ... */

- (IBAction)zoomOut:(id)sender {
    if(defaultFontSize > 14) {
        defaultFontSize = defaultFontSize - 2;
        [theContent setFont:[UIFont systemFontOfSize:defaultFontSize]];            
    }
}

当我第一次显示UIViewController并点按zoomInzoomOut按钮时,theContent中的文字大小不会改变。

更确切地说:调用方法(我已经放了一些日志),但UITextView字体大小没有更新。

是的,如果我点击其他按钮(按钮点击正在改变屏幕不透明度,所以我认为这会强制屏幕刷新)采取我之前制作的所有点击(即如果我点击zoomIn 2次,我得到了+4在字体大小)然后开始正常工作。

问题: 如果我想要UITextView的“刷新”,我怎么能(如果可能的话)强行? 当我开始显示UIViewController时,为什么我的按钮不起作用,但是在“屏幕刷新”后它们工作?

如果你能提供帮助,我将很高兴: - )

2 个答案:

答案 0 :(得分:1)

在更改字体大小后立即在UITextView上调用setNeedsLayout。某些方法必须使布局无效(如更改不透明度),这很有意义。更改字体特征不会使布局无效 - 您必须告诉操作系统需要重新布局。

- (IBAction)zoomIn:(id)sender {
    if(defaultFontSize < 60) {
        defaultFontSize = defaultFontSize + 2;
        [theContent setFont:[UIFont systemFontOfSize:defaultFontSize]];
        [theContent setNeedsLayout];
    }
}

- (IBAction)zoomOut:(id)sender {
    if(defaultFontSize > 14) {
        defaultFontSize = defaultFontSize - 2;
        [theContent setFont:[UIFont systemFontOfSize:defaultFontSize]];           
        [theContent setNeedsLayout]; 
    }
}

答案 1 :(得分:0)

愚蠢的解决方案诀窍......我将内容保存在临时变量中并重新插入... 并不为此感到骄傲,但它正在发挥作用......

- (IBAction)zoomIn:(id)sender {

    if(defaultFontSize < 60) {
        NSString *tmpString;
        tmpString = theContent.text;
        defaultFontSize = defaultFontSize + 2.0;
        [theContent setFont:[UIFont systemFontOfSize:defaultFontSize]];
        [theContent setText:@""];
        [theContent setText:tmpString];
    }
}
相关问题