[ios] 텍스트 속성을 설정 한 후 UITextView 스타일이 재설정됩니다

내가 가진 UITextView *_masterText및 호출 방법 후 setText속성 글꼴되고 재설정됩니다. SDK 7을 변경하면 발생합니다. _masterText is IBOutlet, global 및 속성이 스토리 보드에 설정되어 있습니다. 나만 아니면 일반 SDK 버그입니까?

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

@implementation myViewController

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



답변

몇 시간 동안 이것과 함께 앉아 버그를 발견했습니다. “Selectable”= NO 속성 인 경우 setText를 사용할 때 글꼴 및 글꼴 색상이 재설정됩니다.

선택 가능을 켜면 버그가 사라집니다.


답변

나는 같은 문제 (Xcode 6.1에서)를 만났고 John Cogan의 대답 이 나를 위해 일하는 동안 UITextView 클래스를 범주로 확장하는 것이 특정 프로젝트에 더 나은 솔루션이라는 것을 알았습니다.

상호 작용

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

이행

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


답변

텍스트보기를 “읽기 전용”으로하려면 편집 가능 및 선택 가능을 선택하고 사용자 상호 작용 사용을 선택 취소 할 수 있습니다.이 경우 UITextView가 원하는대로 작동합니다.

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오


답변

이 문제가 있고 위의 답변이 도움이되었지만 다음과 같이 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];
    }
}


답변

편집하다 :

iOS 7에서 UITextView의 글꼴 설정은 처음 텍스트를 설정 한 다음 글꼴을 설정하면 효과적입니다.

@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

}

XIB 파일에서 UITextView에 텍스트를 추가하고 글꼴이나 색상을 변경하면 작동합니다.


답변

이 문제에 자주 사용하는 빠른 서브 클래스 솔루션이 있습니다.

class WorkaroundTextView: UITextView {
    override var text: String! {
        get {
            return super.text
        }
        set {
            let originalSelectableValue = self.selectable
            self.selectable = true
            super.text = newValue
            self.selectable = originalSelectableValue
        }
    }
}


답변

이 문제는 Xcode 8에서 재 포장되었습니다.

확장명을 다음과 같이 변경했습니다.

extension UITextView{
    func setTextAvoidXcodeIssue(newText : String, selectable: Bool){
        isSelectable = true
        text = newText
        isSelectable = selectable
    }
}

Interface Builder에서 Selectable 옵션을 확인했습니다.

그 ‘선택 가능’매개 변수를 갖는 것은 그리 우아하지 않지만 그렇게 할 것입니다.