Как программно добавить текст в UIView
-
13-09-2020 - |
Вопрос
у меня есть UIView
к которому я хотел бы добавить несколько фрагментов текста.Я использовал UITextView
но я думаю, что это излишне, поскольку его не нужно редактировать.Я думал об использовании UILabel
или UITextField
, но я не понимаю, как вы указываете супервизору, где расположить UILabel
или UITextField
внутри себя.Мне нужен объект с наименьшим размером, который позволит мне поместить текст шрифта/цвета/размера по моему выбору в мой UIView
где я хочу.Не так уж много я прошу, а?
Решение
Самый простой подход для вас:
UILabel *yourLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 300, 20)];
[yourLabel setTextColor:[UIColor blackColor]];
[yourLabel setBackgroundColor:[UIColor clearColor]];
[yourLabel setFont:[UIFont fontWithName: @"Trebuchet MS" size: 14.0f]];
[yourSuperView addSubview:yourLabel];
Создание или заполнение представлений в вашем коде, вероятно, потребует от вас использования CGRectMake
много.Как следует из названия, он создает прямоугольник, который вы можете использовать для установки относительного положения (относительно границ вашего суперпредставления) и размера вашего UIView-Subclass
(в этом случае UILabel
).
Это работает следующим образом:
yourLabel.Frame = CGRectMake(x, y, width, height); //x,y,width,height are float values.
x
определяет расстояние между левой границей суперпредставления и началом подпредставления, которое вы собираетесь добавить, то же самое относится и к y
но это касается расстояния между верхней границей вашего суперпредставления.тогда ширина и высота говорят сами за себя, я думаю.
Надеюсь, это поможет вам встать на правильный путь.
Другие советы
Вместо того, чтобы искать способ сообщить представлению, где расположить UILabel, вы можете указать UILabel, где расположить себя в представлении, используя «center».
Например.
myLabel.center = CGPointMake(0.0, 0.0);
Надеюсь, вы сможете использовать UILabel, для меня это базовая форма гибкого нередактируемого текста.
Для Свифта:
let yourLabel = UILabel(frame: CGRectMake(100, 100, 100, 100))
yourLabel.textColor = UIColor.whiteColor()
yourLabel.backgroundColor = UIColor.blackColor()
yourLabel.text = "mylabel text"
yoursuperview.addSubview(yourLabel)
Этот вопрос старый, но для чистого текстового варианта UIView без использования UILabel или UITextField (как описывают все остальные ответы, но вопрос в том, как это сделать без них), drawRect в подклассе UIView работает для меня.Вот так:
- (void)drawRect:(CGRect)rect{
NSString *string = @"Hello World!";
[string drawAtPoint:CGPointMake(100, 100) withFont:[UIFont boldSystemFontOfSize:16.0]];
}
Эта процедура отображает текст в позиции X-Y.
-(void)placeText:(NSString *)theText:(int)theX:(int)theY {
UILabel *textLabel;
// Set font and calculate used space
UIFont *textFont = [UIFont fontWithName:@"Helvetica" size:14];
CGSize textStringSize = [theText sizeWithFont:textFont constrainedToSize:CGSizeMake(300,50) lineBreakMode:NSLineBreakByTruncatingTail];
// Position of the text
textLabel = [[UILabel alloc] initWithFrame:CGRectMake(theX+OFFSETIMAGEX-(textStringSize.width/2), theY+OFFSETIMAGEY-(textStringSize.height/2), textStringSize.width,textStringSize.height)];
// Set text attributes
textLabel.textColor = [UIColor blackColor];
textLabel.backgroundColor = [UIColor orangeColor];
textLabel.font = textFont;
textLabel.text = theText;
// Display text
[self.view addSubview:textLabel];
}
Возможно, уже поздно, но вот что я использую: -
CGRect labelFrame = CGRectMake(120,300, 530, 100);
UILabel *myLabel = [[UILabel alloc] initWithFrame:labelFrame];
//If you need to change the color
[myLabel setTextColor:[UIColor whiteColor]];
//If you need to change the system font
[myLabel setFont:[UIFont fontWithName:NULL size:23]];
//If you need alignment
[myLabel setTextAlignment:NSTextAlignmentCenter];
// The label will use an unlimited number of lines
[myLabel setNumberOfLines:0];
//Add label view to current view
[self.view addSubview:myLabel];
NSString *someString = @"Sample String, Yarp!";
myLabel.text = someString;
добавьте UILabel в свое представление.затем переопределите метод LayoutSubviews представления.