Можно ли прокрутить объект UIWebView к объекту UIView? - PullRequest
1 голос
/ 22 февраля 2012

В одном из пользовательских интерфейсов моего приложения я хочу, чтобы мое приложение отображало представление с прокруткой (количество прокручиваемых страниц динамически устанавливается во время выполнения). Но я хочу добавить элементы UIWebView и UIView в один и тот же массив, чтобы при прокрутке я мог отображать как UIWebView (скажем, веб-страницу), так и какой-нибудь другой View?

EDIT

Я получил этот ответ, который выглядит так, как будто все в порядке, но не работает (или я не смог) вот код: NSArray * myArray; // Заполняем массив кучей объектов UIWebView и UIView здесь

for (id theObject in myArray)
{
    if ([theObject isKindOfClass:[UIWebView class]]) {
        // do stuff
    }
    else if ([theObject isKindOfClass:[UIView class]]) {
        // do other stuff
    }
}

Кто-нибудь может помочь? Мне нужно создать прокручиваемый массив представлений (например, главную страницу iPhone), но первая страница (значит, представление) должна быть членом UIWebView (остальные UIView)

А ниже приведен весь мой код (здесь я ничего не пытаюсь сделать):

  CGRect frame;
     [webView initWithFrame:frame];
    NSArray *colors = [NSArray arrayWithObjects:webView, [UIColor blackColor],[UIColor blackColor],  nil];
        for (int i = 0; i < colors.count; i++) {

        CGRect frame;
        frame.origin.x = self.scrollView.frame.size.width * i;
        frame.origin.y = 0;
        frame.size = self.scrollView.frame.size;


        UIView *subview = [[UIView alloc] initWithFrame:frame];
        subview.backgroundColor = [colors objectAtIndex:i];
        [subview setTag:i];
        if([subview tag]==2){
            UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
            button.frame = CGRectMake(70.0f, 600.0f, 250.0f, 60);
            [button  setTitle:@"Read Messages" forState:UIControlStateNormal];
                for(NSDictionary* buttonData in butDat) { 
                UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
                NSString* buttonTitle = [buttonData objectForKey:@"name"];
                NSString* buttonID=[buttonData objectForKey:@"order_number"];
                [button setTitle:buttonTitle forState:UIControlStateNormal];
                [button setTag:[buttonID intValue]];
                button.titleLabel.font=[UIFont systemFontOfSize:28];

                 CGFloat yPosition = 60.0f;
                const CGFloat buttonHeight = 85.0f;

                if (button.tag==1) {
                    button.frame = CGRectMake(70.0f, yPosition, 250.0f, buttonHeight);
                    //[ma.view addSubview:button];
                }
                if (button.tag==2) {
                    button.frame = CGRectMake(440.0f, yPosition, 250.0f, buttonHeight);
                    //[ma.view addSubview:button];   
                }
                if (button.tag==3) {
                    button.frame = CGRectMake(70.0f, 200.0f, 250.0f, buttonHeight);
                    //[ma.view addSubview:button];
                }
                if (button.tag==4) {
                    button.frame = CGRectMake(440.0f, 200.0f, 250.0f, buttonHeight);
                    //[menu_2.view addSubview:button];//****

                }
                if (button.tag==5) {
                    button.frame = CGRectMake(70.0f, 335.0f, 250.0f, buttonHeight);
                    //[menu_2.view addSubview:button];//****

                }
                if (button.tag==6) {
                    button.frame = CGRectMake(440.0f, 335.0f, 250.0f, buttonHeight);
                    //[menu_2.view addSubview:button];//****

                }

                [button addTarget:self action:@selector(secondAct:) forControlEvents:UIControlEventTouchUpInside];
                [scrollView addSubview:button];
            }
                //


            [button addTarget:self action:@selector(readM:) forControlEvents:UIControlEventTouchUpInside];
          //  [scrollView addSubview:button];
            [self.view addSubview:button];


            //  [self.scrollView addSubview:button];

        }
        [self.scrollView addSubview:subview];

Ответы [ 3 ]

4 голосов
/ 22 февраля 2012

Ничто не мешает вам добавлять объекты типа UIWebView и UIView к тому же NSArray.

Если ваш код должен знать, имеете ли вы дело с UIWebView или UIView, вы можете использовать метод isKindOfClass: для проверки:

NSArray *myArray;
// Fill the array with a bunch of UIWebView and UIView objects here

for (id theObject in myArray)
{
    if ([theObject isKindOfClass:[UIWebView class]]) {
        // do stuff
    }
    else if ([theObject isKindOfClass:[UIView class]]) {
        // do other stuff
    }
}

Кроме того, UIWebView является подклассом UIView и наследует многие из одних и тех же методов, что делает расположение представления одинаковым в обоих случаях.

С точки зрения пользовательского интерфейса, вероятно, плохая практика иметь представления прокрутки внутри представлений прокрутки, поэтому вы захотите отключить прокрутку объектов UIWebView. Если вы ориентируетесь на iOS 5 и выше, вы можете использовать следующее:

webView.scrollView.scrollEnabled = NO; 
webView.scrollView.bounces = NO;

и если у вас версия iOS ниже 5.0, вы можете добавить следующий javascript:

<script type="text/javascript">
    touchMove = function(event) {
        event.preventDefault();
     }
</script>

Для реализации внедрения JavaScript, вы можете использовать UIWebView stringByEvaluatingJavaScriptFromString: метод внутри webViewDidFinishLoad:

См. Здесь для получения дополнительной информации о UIWebView инъекции JavaScript: http://iphoneincubator.com/blog/windows-views/how-to-inject-javascript-functions-into-a-uiwebview


Редактировать: Глядя на ваш код, кажется, что вы вставляете UIWebView и два UIColor объекта в ваш массив. Поэтому вам нужно проверить, имеете ли вы дело с UIWebView или UIColor, или у вас возникнет сбой на subview.backgroundColor = [colors objectAtIndex:i];. Также вы устанавливаете для UIWebView фрейма объекта значение CGRect frame;, которое не инициализировано.

Вы должны заполнить ваш NSArray вашим UIWebView, а затем двумя UIView объектами с установленными цветами фона:

UIWebView *webView = [[UIWebView alloc] init];
UIView *viewOne = [[UIView alloc] init];
[viewOne setBackgroundColor:[UIColor blackColor]];
UIView *viewTwo = [[UIView alloc] init];
[viewTwo setBackgroundColor:[UIColor blackColor]];

NSArray *viewArray = [NSArray arrayWithObjects:webView, viewOne, viewTwo, nil];

for (id theObject in viewArray)
{
    if ([theObject isKindOfClass:[UIWebView class]]) {
        // do stuff
    }
    else if ([theObject isKindOfClass:[UIView class]]) {
       // do other stuff
    }
}
3 голосов
/ 22 февраля 2012

Да.UIWebViews происходят от UIViews.Вы можете использовать их, где бы вы ни вставляли UIView в качестве подпредставления, в том числе в родительском представлении UIScrollView, или в качестве объекта, который нужно вставить в массив.

2 голосов
/ 28 февраля 2012

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

[scrollView setContentSize:CGSize];

в конце кода. то есть; после

[self.scrollView addSubview:subview];

Для слепой попытки используйте

[scrollView setContentSize:CGSizeMake(1000,1000)];

это определенно прокрутит представление !!!

...