设置文本属性后,将重置UITextView样式

Bła*_*żej 145 fonts cocoa-touch uitextview ios

我有UITextView *_masterText和之后调用方法setText属性字体正在重置.这是在我更改sdk 7. _masterText之后发生的IBOutlet,全局和属性在storyboard中设置.这只是我或这是一般的SDK错误?

@interface myViewController : UIViewController
{
  IBOutlet UITextView *_masterText;
}

@implementation myViewController

-(void)viewWillAppear:(BOOL)animated
{
    [_masterText setText:@"New text"];
}
Run Code Online (Sandbox Code Playgroud)

小智 450

坐了几个小时,我发现了这个bug.如果属性"可选"= NO,则在使用setText时将重置字体和fontcolor.

所以打开Selectable ON,错误就消失了.

  • 在Xcode 5中也发生了这种情况.我的解决方法是在调用setText之前临时设置selectable = YES: (15认同)
  • 6.1.1.Apple是否曾在Xcode中修改过任何东西? (12认同)
  • 哇,多么荒谬的虫子.感谢您的见解! (8认同)
  • 6.4仍然有这个问题 (6认同)
  • 仍然是Xcode 7.3中的一个问题.......加入Apple ....请修复它大声笑 (4认同)
  • 这似乎在iOS 10中已得到修复,如果仍然针对iOS 9或更低版本,则需要执行此解决方法. (4认同)
  • 非常非常感谢你 ! (3认同)
  • Xcode 7.2 - 问题仍然隐藏在黑暗中. (3认同)
  • 在2016年发现了这个漏洞,很奇怪在^^之后看到堆栈上的结果 (3认同)
  • 你刚刚在墙上攒了几个小时和几个洞 (2认同)
  • 仍然是6 beta 6的问题. (2认同)
  • @John是的你只需设置selectable = TRUE,设置文本,然后再次设置selectable = FALSE.这仍然是6.3.1中的错误 (2认同)
  • 发布3年以来.还是个问题(Xcode 7.3.1).让我疯了一个小时试图搞清楚,真是浪费时间.感谢上帝,我找到了这篇文章.Common Apple已经解决了这个问题.它很荒谬. (2认同)

小智 11

我遇到了同样的问题(在Xcode 6.1上),当John Cogan的回答对我有用时,我发现用类别扩展UITextView类对我的特定项目来说是一个更好的解决方案.

接口

@interface UITextView (XcodeSetTextFormattingBugWorkaround)
    - (void)setSafeText:(NSString *)textValue;
@end
Run Code Online (Sandbox Code Playgroud)

履行

@implementation UITextView (XcodeSetTextFormattingBugWorkaround)
- (void)setSafeText:(NSString *)textValue
{
    BOOL selectable = [self isSelectable];
    [self setSelectable:YES];
    [self setText:textValue];
    [self setSelectable:selectable];
}
@end
Run Code Online (Sandbox Code Playgroud)


Chu*_*y47 8

如果您希望文本视图为"只读",则可以选中"可编辑"和"可选择"并取消选中"启用用户交互",这样UITextView的行为就像我想要的那样

在此输入图像描述

在此输入图像描述

  • 从表面上看,这似乎是一个可行的解决方案,但最终对于UITextView来说不是一个好的选择.通常您选择UITextView是因为您需要一个可滚动的文本区域.禁用用户交互也会禁用滚动视图.对我来说,使用UITextView的选择是因为我有一个区域需要容纳更多的文本而不是适合该区域,并且能够滚动. (3认同)

Joh*_*gan 6

有这个问题我自己和上面的答案有帮助,但我添加了一个包装到我的ViewController代码如下,只是传递uiview实例和文本进行更改,包装函数切换可选值,更改文本,然后再将其关闭.默认情况下,您需要在任何时候关闭uitextview.

/*
    We set the text views Selectable value to YES temporarily, change text and turn it off again.
    This is a known bug that if the selectable value = NO the view loses its formatting.
 */
-(void)changeTextOfUiTextViewAndKeepFormatting:(UITextView*)viewToUpdate withText:(NSString*)textValue
{
    if(![viewToUpdate isSelectable]){
        [viewToUpdate setSelectable:YES];
        [viewToUpdate setText:textValue];
        [viewToUpdate setSelectable:NO];
    }else{
        [viewToUpdate setText:textValue];
        [viewToUpdate setSelectable:NO];
    }
}
Run Code Online (Sandbox Code Playgroud)