내가 가진 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
답변
답변
이 문제가 있고 위의 답변이 도움이되었지만 다음과 같이 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 옵션을 확인했습니다.
그 ‘선택 가능’매개 변수를 갖는 것은 그리 우아하지 않지만 그렇게 할 것입니다.