4

iCarousal を使用しており、iCarousal ビューで 3 つの webview、5 つの imageview、および 2 つのラベルを使用する必要があり、合計 10 個の iCarousal ビューがあります。 iCarousel が移動したときに値を変更します。

- (void)carouselCurrentItemIndexDidChange:(iCarousel *)objcarousel

iCarousel の現在のインデックスobjcarousel.currentItemIndexを取得していますが、タグを使用してビューを取得すると、現在のビューを取得できません。2 番目の次のビューが表示されます。

コード:

- (NSUInteger)numberOfItemsInCarousel:(iCarousel *)carousel
{
    return MainIndexArray.count;
}

- (void)carouselCurrentItemIndexDidChange:(iCarousel *)carousel1
{

    if(carousel1.currentItemIndex<3)
    {

    }
    else
    {
        UIWebView *WEB=(UIWebView *) [carousel1 viewWithTag:2];
        NSLog(@"WEB====%@",WEB);

        [WEB stopLoading];

        static NSString *youTubeVideoHTML = @"<!DOCTYPE html><html><head><style>body{margin:0px 0px 0px 0px;}</style></head> <body> <div id=\"player\"></div> <script> var tag = document.createElement('script'); tag.src = \"http://www.youtube.com/player_api\"; var firstScriptTag = document.getElementsByTagName('script')[0]; firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); var player; function onYouTubePlayerAPIReady() { player = new YT.Player('player', { width:'%0.0f', height:'%0.0f', videoId:'%@', events: { 'onReady': onPlayerReady, } }); } function onPlayerReady(event) { event.target.playVideo(); } </script> </body> </html>";

        NSLog(@"currentItemIndex=====%d",carousel1.currentItemIndex);

        NSString *html = [NSString stringWithFormat:youTubeVideoHTML, WEB.frame.size.width, WEB.frame.size.height,[YouTubeUrlArray objectAtIndex:0]];

        [WEB loadHTMLString:html baseURL:[[NSBundle mainBundle] resourceURL]];

    } 
}


- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view
{
    UILabel *label = nil;
    UIWebView *web=nil;

    //create new view if no view is available for recycling
    if (view == nil)
    {
        view = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 280, 200.0f)];
        ((UIImageView *)view).image = [UIImage imageNamed:@"page.png"];
        view.contentMode = UIViewContentModeCenter;

        if(index<3)
        {
            label = [[UILabel alloc] initWithFrame:view.bounds];
            label.backgroundColor = [UIColor grayColor];
            label.textAlignment = NSTextAlignmentCenter;
            label.font = [label.font fontWithSize:50];
            label.tag = 1;
            [view addSubview:label];

        }
        else
        {
            web=[[UIWebView alloc]initWithFrame:view.bounds];
            web.tag=2;
            [view addSubview:web];
        }
    }
    else
    {
        //get a reference to the label in the recycled view

        if(index<3)
        {
            label = (UILabel *)[view viewWithTag:1];
        }
        else
        {
            web=(UIWebView*) [view viewWithTag:2];
        }
    }


    if(index<3)
    {
        label.text = [MainIndexArray objectAtIndex:index];
    }
    else
    {
        [web loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]]];
    }

    return view;
}

したがって、iCarousel がスクロールするときに現在のラベルまたは現在の webview または現在の imageview を取得するにはどうすればよいか教えてください。

4

1 に答える 1

6

個々のアイテム ビューを取得するには、itemViewAtIndex:withを使用する必要があります。currentItemIndex次に、viewWithTag:そのビューで使用します。

問題は、viewWithTag:すべてのサブビューを検索して最初に一致したものを返すことです。カルーセル自体で実行すると、どのビューが最初に検出されて返されるかは保証されません。

UIWebView *WEB = (UIWebView *)[[carousel1 itemViewAtIndex:carousel1.currentItemIndex] viewWithTag:2];
于 2014-04-03T11:28:04.613 に答える