В моем программно созданном экземпляре UITextView (инициализирован с помощью NSTextContainer) свойство.text всегда равно nil
[ОБНОВЛЕНО с РЕШЕНИЕМ и РАБОЧИМ КОДОМ в нижней части]
В -viewDidLoad я размещаю, initWithFrame:
Добавить myTextView в subView
Установите некоторые основные свойства (выравнивание, цвет фона, цвет текста и т. Д.)
Установить текст по умолчанию
.Text не появляется. Появляется myTextView (как указано цветом фона), устанавливается точка останова, у него есть рамка, память и т. д. Все выглядит правильно. myTextView выглядит хорошо, но.text ноль. Я изменяю это, устанавливаю это, обновляю это. Независимо от того, что.text остается ноль.
Я прочитал документацию снова и снова. Никаких упоминаний о том, чего я не делаю. Я в недоумении. Помогите.
в @interface MyController ()...
Раньше все было (слабо), но я на всякий случай включил его (сильно). Нет кости.
@property (strong, nonatomic) UIScrollView *scrollView;
@property (strong, nonatomic) UIImageView *imageView;
@property (strong, nonatomic) UILabel *titleLabel;
@property (strong, nonatomic) UITextView *contentTextView;
в viewDidLoad...
- (void)viewDidLoad {
[super viewDidLoad];
// scroll view
CGSize size = CGSizeMake(703, self.view.frame.size.width);
UIScrollView *aScrollView = [[UIScrollView alloc] initWithFrame: self.view.frame];
self.scrollView = aScrollView;
[self.scrollView setDelegate: self];
[self.scrollView setDirectionalLockEnabled: YES];
[self.scrollView setContentSize: size];
[self.view addSubview: self.scrollView];
// image view
CGRect frame = CGRectMake(0, 0, 703, 400);
UIImageView *anImageView = [[UIImageView alloc] initWithFrame: frame];
self.imageView = anImageView;
[self.scrollView addSubview: self.imageView];
[self.imageView setBackgroundColor: [UIColor blueColor]];
[self.imageView setContentMode: UIViewContentModeScaleAspectFit];
// text view
frame = CGRectMake(0, self.imageView.frame.size.height, 703, self.view.frame.size.width - self.imageView.frame.size.height);
size = CGSizeMake(self.view.frame.size.height -320, self.view.frame.size.width - self.imageView.frame.size.height);
NSTextContainer *textContainer = [[NSTextContainer alloc] initWithSize: size];
UITextView *aTextView = [[UITextView alloc] initWithFrame: frame textContainer: textContainer];
self.contentTextView = aTextView;
[self.scrollView addSubview: self.contentTextView];
self.contentTextView.delegate = self;
self.contentTextView.editable = NO;
self.contentTextView.hidden = NO;
[self.body setBackgroundColor: [UIColor orangeColor]];
// text characteristics
self.contentTextView.textColor = [UIColor blueColor];
self.contentTextView.textAlignment = NSTextAlignmentNatural;
self.contentTextView.font = [UIFont fontWithName: @"Helvetica" size: 30];
self.contentTextView.text = @"SOME AWESOME TEXT";
self.contentTextView.autoresizingMask = UIViewAutoresizingFlexibleHeight;
// text view specific
self.contentTextView.contentSize = size;
// controller
[self setEdgesForExtendedLayout:UIRectEdgeNone];
}
[Обновление: решение]
При выделении / инициализации UITextView с помощью NSTextContainer вам также необходимо отдельно инициализировать NSLayoutManager и NSTextStorage для прикрепления.text.
Вот обновленный рабочий код
NSTextContainer *textContainer = [[NSTextContainer alloc] initWithSize: size];
NSLayoutManager *layoutManager = [NSLayoutManager new];
self.layoutManager = layoutManager;
[layoutManager addTextContainer: textContainer];
NSTextStorage *textStorage = [[NSTextStorage alloc] initWithString: kBaconIpsum];
self.textStorage = textStorage;
[textStorage addLayoutManager: layoutManager];
UITextView *aTextView = [[UITextView alloc] initWithFrame: frame textContainer: textContainer];
self.contentTextView = aTextView;
[self.scrollView addSubview: self.contentTextView];
3 ответа
NSTextContainer
это новая функция iOS 7.0, она определяет регион, в котором расположен текст. И согласно Документации Apple, в нем говорится: "Новый текстовый контейнер должен быть добавлен к объекту NSLayoutManager, прежде чем его можно будет использовать". Я думаю, вот почему .text
всегда nil
,
Это был NSTextContainer...
Я закомментировал это и использовал только фрейм, и текст теперь появляется, и он будет казаться.text больше не ноль. Что поднимает вопрос... Как предполагается использовать NSTextContainers с UITextViews?
// NSTextContainer *textContainer = [[NSTextContainer alloc] initWithSize: size];
// UITextView *aTextView = [[UITextView alloc] initWithFrame: frame textContainer: textContainer];
UITextView *aTextView = [[UITextView alloc] initWithFrame: frame];
self.contentTextView = aTextView;
Вопрос немного старый, но он помог мне решить аналогичную проблему, пытаясь отформатировать текст в scrollView, и привел меня к рисунку 1. Создание и настройка текстовых объектов без просмотра. Для чего это стоит...
-(id)makeHelpPage1:(CGRect)rect
{
page1 = [[UIView alloc] initWithFrame:rect];
// NSString *help = [scrollHelp objectAtIndex:1];
NSString *help = @"SOME AWESOME TEXT";
HelpTextView *showHelp = [[HelpTextView alloc] formatHelpTextNew:(NSString*)help];
[page1 addSubview:showHelp];
return page1;
}
#import "HelpTextView.h"
@implementation HelpTextView
-(id)formatText:(NSString*)messageID
{
// TextKit - non-view
NSTextStorage *textStorage;
NSLayoutManager *layoutManager;
NSTextContainer *textContainer;
textStorage = [[NSTextStorage alloc] initWithString:(NSString*)messageID];
layoutManager = [[NSLayoutManager alloc] init];
textContainer = [[NSTextContainer alloc] init];
[layoutManager addTextContainer:textContainer];
[textStorage addLayoutManager:layoutManager];
// TextKit - as viewed
UITextView *textView = [[UITextView alloc] initWithFrame: textFrame textContainer: textContainer];
return textView;
}
Отказ от ответственности: текст не отформатирован