2009-06-15 3 views
0

Есть ли у кого-нибудь идеи, как получить доступ к классу UIScroller, который является подчиненным по умолчанию UIWebView?UIScroller внутри UIWebView

Я хочу обрабатывать штрихи, масштабирование, панорамирование и прокрутку внутри веб-представления.

Спасибо ..

ответ

1

Вы можете найти, перейдя так:

[webview objectAtIndex:0] 

Это должно быть там, где она есть. Если нет, то это в вашем коде где-нибудь и запустить программу для поиска индекса UIScroller, и заменить 0 выше этого показателя: -

for (UIView *subview in [webView subviews]){ 
    NSLog(@"subviews of webView : %@", [[subview class] description]); 
} 
+0

Предполагается, что Apple не изменит макет или порядок подпрограмм UIWebView в течение всего срока службы вашего приложения, которое обычно работает, и является обычным «взломом». – Russ

+0

@ Russ Я согласен, что это не вечно действительный подход. Тогда любое предложение решения? –

+0

и немного лучший «взлом», который я видел, это (правильный код ускользает от меня, его на моем mac): 'for (UIView * v in [subviews webView]) { if ([v class] == [UIScrollView class]) { // Делаем материал в виде прокрутки здесь } } ' } Это будет адаптироваться, если индекс изменится, но если они должны были встроить более 1 UIScrollView (который они советуют против жестов, запутанных) то вы либо примените его ко всем, либо можете выйти из режима ожидания и надеяться, что первый из них вам нужен. Если они меняют структуру, то вы можете использовать мой iOS 5 ответ ниже – Russ

2

Я знаю, эта нить старый, но если кто-то попадается это новый способ.

Начиная с iOS 5 UIWebView теперь есть свойство scrollView, которое вы не можете заменить, но вы можете установить его свойства. Большинство людей просто хотят, чтобы отключить масштабирование/подпрыгивая/прокрутка все вместе, что может быть сделано путем установки свойства Scrollview, например, если webview является UIWebView:

webview.scrollView.bounces = NO; //Disables webview from bouncing 
webview.scrollView.minimumZoomScale = webview.scrollView.maximumZoomScale = 1.0; //Forces zoom to be at 1 (can be whatever you fancy) and disables zooming 
webview.scrollView.bouncesZoom = NO; //Disables bouncing when zooming exceeds minimum or maximum zoom 

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

Обработка касаний будет сложнее, поскольку вы не можете заменить scrollView, чтобы предоставить свои собственные обработчики. Лучшее, что вы можете сделать, это добавить распознавателей жестов в качестве части UIView и попытаться обработать их там, но я думаю, что UIWebView все равно получит события. Альтернативно, в iOS 5 они позволяют вам получить доступ к распознавателям жестов непосредственно на UIScrollView.

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