Автоматическое обнаружение ссылок в UILabel tableview

#iphone #objective-c #ios #hyperlink #uilabel

#iPhone #objective-c #iOS #гиперссылка #uilabel

Вопрос:

Я нашел довольно много материала по этой теме. Я просто хочу, чтобы ссылки, которые появляются в моей метке, автоматически определялись как ссылки и гиперссылки. Я просмотрел проект three20 TTtwitter, но он выглядит действительно сложным, и я не знаю, с чего начать его интеграцию.

Кто-нибудь знает, можно ли это сделать простым способом, или кто-нибудь может попытаться объяснить мне?

Заранее спасибо!

Ответ №1:

Предложит вам использовать UIWebView

Используйте приведенное ниже свойство UIWebView для обнаружения ссылки..

 @property(nonatomic) UIDataDetectorTypes dataDetectorTypes
  

Комментарии:

1. Но текст, который у меня сейчас есть, загружен в Label, могу ли я установить все свойства точно так же, как label? Например, количество строк.

2. Кстати, я работаю с TableView с пользовательской ячейкой. В этих пользовательских ячейках есть метки. Должен ли я просто изменить его с UILabel на UIWebView?

3. @peter: Да, вам нужно перейти с UILabel на UIWebView

4. Я пытался изменить это, но это действует не так, как мне нужно. Ссылка открывается в том же uiwebview, и поскольку это вложенный просмотр ячейки табличного представления, это работает неправильно. Кроме того, я могу щелкнуть по ссылке только при включенном пользовательском взаимодействии. Поскольку я использую это для расширения и втягивания ячейки, с этим возникают некоторые проблемы.

Ответ №2:

Вы не можете подчеркивать текст в UILabels или UIButtons. Вот что я сделал в аналогичной ситуации.

Я хотел иметь подчеркнутый текст в представлении, которое выглядело бы как ссылка, но мне не нужна была функциональность UIWebView, и мне нужна была стандартная функциональность UIControl target / action. То, что я сделал, работает, только если у вас есть одна строка текста, которую вы хотите отобразить и которая должна выглядеть как ссылка. Используйте это так же, как и стандартную UIButton. Вы должны создать с типом = UIButtonTypeCustom.

Я создал подкласс UIButton, который поддерживает подчеркивание одной строки текста путем переопределения drawRect . Я добавил BOOL _titleLabelUnderlined iVar в подкласс.

xButton.m

 - (void)drawRect:(CGRect)rect
{
   // just in case...
   [super drawRect];

   if (_titleLabelUnderlined) {
        CGContextRef context = UIGraphicsGetCurrentContext();

        // determine the size of the titleLabel text based on the font
        CGSize textSize =[self.titleLabel.text sizeWithFont:self.titleLabel.font 
                                                   forWidth:self.bounds.size.width
                                              lineBreakMode:UILineBreakModeTailTruncation];

        // set the underline color
        CGContextSetStrokeColorWithColor(context, self.currentTitleColor.CGColor);

        // line width
        CGContextSetLineWidth(context, 1.0f);

        // calc the start and end points for the line
        CGFloat minX = self.titleLabel.center.x - textSize.width/2.0f;
        CGFloat maxX = self.titleLabel.center.x   textSize.width/2.0f;

        // start the line
        CGContextMoveToPoint(context, minX, CGRectGetMinY(self.titleLabel.frame)   CGRectGetHeight(self.titleLabel.frame)   1.0f);

        // draw the line to the end point
        CGContextAddLineToPoint(context, maxX, CGRectGetMinY(self.titleLabel.frame)   CGRectGetHeight(self.titleLabel.frame)   1.0f);

        // commit the drawing
        CGContextStrokePath(context);
    }
}