0

こんにちは、現在操作キューに 3 つの Web ビューをすべてロードしているタブに応じて特定の Web ビューを非表示および表示するカスタム タブ バーを作成し、選択したタブに応じてそれらを表示および非表示にします。問題は、ロードとスクロールが非常に遅く、受信したメモリの警告が表示されることです

これが私がこれまでに行ったことです

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    NSArray *subviews = [cell subviews];
        for(UIView *subview in subviews) if([subview tag] == 4) [subview removeFromSuperview];

        UIView *loadingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 800)];
        UIView *sendingMessage = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
        UIActivityIndicatorView *sendingSpinner = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(25, 15, 50, 50)];
        UILabel *sendingLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 65, 100, 20)];

        int sendingViewLeft = (loadingView.frame.size.width/2) - (sendingMessage.frame.size.width/2);
        int sendingViewTop = 160 - (sendingMessage.frame.size.height/2);

        loadingView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5];

        sendingMessage.frame = CGRectMake(sendingViewLeft, sendingViewTop, sendingMessage.frame.size.width, sendingMessage.frame.size.height);
        sendingMessage.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5];
        sendingMessage.layer.cornerRadius = 10;

        sendingSpinner.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge;

        sendingLabel.textColor = [UIColor whiteColor];
        sendingLabel.backgroundColor = [UIColor clearColor];
        sendingLabel.text = @"Loading...";
        sendingLabel.textAlignment = UITextAlignmentCenter;
        sendingLabel.font = [UIFont boldSystemFontOfSize:12];
        sendingLabel.shadowColor = [UIColor blackColor];
        sendingLabel.shadowOffset = CGSizeMake(0, -1);

        [sendingSpinner startAnimating];
        [sendingMessage addSubview:sendingLabel];
        [sendingMessage addSubview:sendingSpinner];
        [loadingView addSubview:sendingMessage];

        [loadingView setTag:4];

       cell.textLabel.text = @"";


    if([self.webViewStatus isEqualToString:@"FALSE"]){
        [cell addSubview:loadingView];
        self.tableView.userInteractionEnabled = NO;
    } else {
        [cell addSubview:self.fixturesWebView];
        [cell addSubview:self.resultsWebView];
        [cell addSubview:self.tablesWebView];
        self.tableView.userInteractionEnabled = YES;
    }


    if(self.selectedTabNumber == 1){
        self.fixturesWebView.alpha = 1;
        self.resultsWebView.alpha = 0;
        self.tablesWebView.alpha = 0;
    }

    if(self.selectedTabNumber == 2){
        self.fixturesWebView.alpha = 0;
        self.resultsWebView.alpha = 1;
        self.tablesWebView.alpha = 0;
    }

    if(self.selectedTabNumber == 3){
        self.fixturesWebView.alpha = 0;
        self.resultsWebView.alpha = 0;
        self.tablesWebView.alpha = 1;

    }

    return cell;
}
4

1 に答える 1

0

まず、テーブルビュー データソースで作成するのではなく、カスタム セルを作成することを検討する必要があります。次に、webview コンテンツを取得するときは、非同期呼び出しを使用してロックアップを回避することを検討してください。これはブロックでも実行できます。カスタム セルにデリゲート メソッドを記述すると、テーブルビューに、いつロードされたかどうかなどを知らせることができます。

しかし、テーブルビューでセルを描画する必要があるときに、あまりにも多くの作業を行っているようです。

于 2012-10-26T15:54:56.290 に答える