145 votes

UITextView.font est réinitialisé après setText

J'ai UITextView *_masterText et après avoir appelé la méthode setText La police de la propriété est réinitialisée. Cela se produit après avoir changé le SDK 7. _masterText est IBOutlet Le global et les propriétés sont définis dans le storyboard. C'est seulement moi ou c'est un bug général du SDK ?

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

@implementation myViewController

-(void)viewWillAppear:(BOOL)animated
{
    [_masterText setText:@"New text"];
}

450voto

Bosse Nilsson Points 1516

Après des heures de travail, j'ai trouvé le problème. Si la propriété "Selectable" = NO, la police et la couleur de la police seront réinitialisées lorsque setText sera utilisé.

Activez donc la fonction de sélection et le problème disparaît.

11voto

Ken Steele Points 11

Je me suis heurté au même problème (sur Xcode 6.1) et alors que La réponse de John Cogan a fonctionné pour moi, j'ai trouvé que l'extension de la classe UITextView avec une catégorie était une meilleure solution pour mon projet particulier.

interface

@interface UITextView (XcodeSetTextFormattingBugWorkaround)
    - (void)setSafeText:(NSString *)textValue;
@end

mise en œuvre

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

6voto

John Cogan Points 169

J'ai eu ce problème moi-même et la réponse ci-dessus m'a aidé mais j'ai ajouté un wrapper à mon code ViewController comme suit et je passe juste l'instance uiview et le texte à changer et la fonction wrapper active la valeur Selectable, change le texte et le désactive à nouveau. C'est utile lorsque vous avez besoin que le uitextview soit désactivé à tout moment par défaut.

/*
    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];
    }
}

2voto

Jordan Montel Points 5846

EDIT :

La définition de la police pour UITextView dans iOS 7 fonctionne pour moi si vous définissez d'abord le texte et ensuite la police :

@property (nonatomic, weak) IBOutlet UITextView *masterText;

@implementation myViewController

-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    _myTextView.text = @"My Text";

    _myTextView.font = [UIFont fontWithName:@"Helvetica.ttf" size:16]; // Set Font

}

Dans un fichier XIB, si vous ajoutez du texte dans votre UITextView et changez la police ou la couleur, cela fonctionnera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X