Могу ли я получить доступ к представлениям при рисовании в методе drawRect? - PullRequest
0 голосов
/ 11 января 2011

При создании представления содержимого tableViewCell я использовал drawInRect: withFont, drawAtPoint ... и другие внутри drawRect: поскольку все, что мне было нужно, это положить текст. Оказывается, часть нарисованного текста должна быть кликабельной ссылкой. Поэтому я решил создать UIWebView и вставить его в мой drawRect. Кажется, все выложено нормально, проблема в том, что взаимодействие с UIWebView не происходит. Я попытался включить взаимодействие, не сработало. Я хочу знать, поскольку с drawRect: я рисую в текущем графическом контексте, я могу сделать все, чтобы мои подпредставления взаимодействовали с пользователем?
Вот часть моего кода, который я использую внутри класса UITableViewCell.

-(void) drawRect:(CGRect)rect{  
    NSString *comment = @"something";
    [comment drawAtPoint:point forWidth:195 withFont:someFont lineBreakMode:UILineBreakModeMiddleTruncation];

    NSString *anotherCommentWithURL = @"this comment has a URL http://twtr.us";
    UIWebView *webView = [[UIWebView alloc] initWithFrame:someFrame];
    webView.delegate = self;
    webView.text = anotherCommentWithURL;
    [self addSubView:webView];
    [webView release];
}

Как я уже сказал, представление хорошо отрисовывается, но не взаимодействует с webView извне. URL-адрес внедряется в HTML и должен быть кликабельным. Это не. Я понял, что это работает с другой точки зрения, но на эту я положил взгляды. Есть идеи?

Ответы [ 2 ]

6 голосов
/ 11 января 2011

Вы не хотите создать новый UIWebView и добавить его в качестве подпредставления для каждого вызова на drawRect: Это крайне плохая идея:

  1. Это будет медленно.Это тяжелые объекты, и вы создаете их тысячи.
  2. Вы не избавляетесь от старых UIWebView объектов.Таким образом, вы по существу накладываете тысячи и тысячи их друг на друга.

Вы должны создать UIWebView один раз , возможно, в инициализаторе или какой-то другойметод, который вызывается только один раз.Вы также должны добавить его в качестве подпредставления только один раз.

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

Если ваше представление меняет позицию / размер, то вы можетепереопределите setFrame: и, в дополнение к вызову метода суперкласса, настройте фрейм UIWebView, который вы непременно захотите сохранить в качестве переменной экземпляра.

1 голос
/ 11 января 2011

Это неправильно. Вам не следует создавать экземпляр UIWebView внутри -drawRect: - который потенциально вызывается повторно для обновления экрана.

Вместо этого вы должны по крайней мере создать подкласс UITableViewCell и добавить к нему UIWebView для хранения всего вашего текста.

Даже тогда UIWebView, вероятно, слишком тяжелый для размещения в каждой ячейке.

Возможно, вы захотите проверить это .

...