2014-02-06 3 views
0

, поэтому я пытаюсь реализовать следующее. У меня есть представление, в котором есть предложение. Только часть предложения ссылается на другое представление. Это то, что он выглядит следующим образом:Сделайте только часть предложения ссылкой (добавить селектор)

I am a cat. Learn More 

Узнать больше будет ссылка (синего цвета), который при нажатии будет открыть другой вид.

В настоящее время я использую UILabel для написания «Я кошка». Я понимаю, что лучший способ добавить селекторов - использовать кнопку, поэтому «Узнать больше» должна быть кнопка?

Есть ли способ написать это предложение без использования двух разных UIComponents?

Если нет, то как сделать UILabel и UIButton полностью горизонтально выровненными друг с другом?

Ниже мой код этикетки в -layoutSubviews:

CGSize labelSize = [_label.text sizeWithFont:_label.font constrainedToSize:bounds.size lineBreakMode:_label.lineBreakMode]; 
    _label.frame = CGRectMake(0, 0, bounds.size.width - kMarginForText, labelSize.height); 
    _label.center = CGPointMake(horizontalCenter, CGRectGetMaxY(_previousLabel.frame) + kDistanceBetweenPreviousAndCurrentLabel); 

И код самой этикетке.

_label = [[UILabel alloc] initWithFrame:CGRectZero]; 
    _label.text = "I am a cat"; 
    _label.font = [UIFont systemFontOfSize:14]; 
    _label.textAlignment = NSTextAlignmentCenter; 
    _label.numberOfLines = 0; 
    _label.lineBreakMode = UILineBreakModeWordWrap; 
    [self addSubview:_label]; 

Любая помощь будет принята с благодарностью!

+0

Почему вы не используете раскадровку? – Mika

ответ

0

Чтобы ответить на ваш вопрос об одном UIComponent, вы можете использовать UILabel в сочетании с UITapGestureRecognizer для создания предполагаемого эффекта. Конечно, это сделает всю метку поддающейся отображению ... но наличие более крупной целевой области касания почти никогда не будет плохой.

В частности, вы бы использовать NSAttributedString, чтобы задать текст метки (NSAttributedString change color at end of string):

UILabel *label = [[UILabel alloc] init]; 
//Use initwithframe or setup your constraints after initialization here 
label.attributedText = (your nsattributed string here) 

Затем инициализировать водопроводную распознаватель на UILabel вы могли бы сделать что-то вроде этого:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(userDidTapLearnMore)]; 
label.userInteractionEnabled = YES; 
[label addGestureRecognizer:tap]; 
0

То, что вы хотите сделать, это выровнять их по базовым линиям , которые вы можете легко сделать в Interface Builder, выбрав их и выбрав «Редактор»> «Выровнять»> «Базовые линии», как показано на этой иллюстрации:

enter image description here

+0

Спасибо! Но что, если мне нужно сделать это программно? – Catie

+0

Затем вы будете использовать автозапуск. NSLayoutConstraint дает вам возможность привязать базовую линию одного вида к точке зрения другого. – matt

Смежные вопросы