UITableViewCells appear behind the background

I had a problem setting the background of the UITableView to a UIImageView (see below why I do this), once the view is installed, it works fine and scrolls with the UITableView, but it hides the View Table elements.

I need to have a UIImageView as the background for a UITableView. I know that this has already been answered, but the answers should be used:

[UIColor colorWithPatternImage:[UIImage imageNamed:@"myImage.png"]];

Or something like (which I need to use):

UIImageView *background = [MainWindow generateBackgroundWithFrame:tableView.bounds];
[tableView addSubview:background];
[tableView sendSubviewToBack:background];

The reason I need to use the latter is my generateBackgroundWithFrame method, which takes a large image and draws a border around this image with the specified dimensions and captures the rest of the image:

+ (UIImageView *) generateBackgroundWithFrame: (CGRect)frame {
    UIImageView *background = [[[UIImageView alloc] initWithFrame:frame] autorelease];
    background.image = [UIImage imageNamed:@"globalBackground.png"];
    [background.layer setMasksToBounds:YES];
    [background.layer setCornerRadius:10.0];
    [background.layer setBorderColor:[[UIColor grayColor] CGColor]];
    [background.layer setBorderWidth:3.0];

    return background;
}

: , , . , " ". , , , .

UITableView? -, ? :

- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = 
        [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[[UITableViewCell alloc]
                initWithFrame:CGRectMake(20, 20, 261, 45)
                reuseIdentifier:CellIdentifier] autorelease];

        cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;

        UIImage *rowBackground;         
        NSString *imageName = @"standAloneTVButton.png";    
        rowBackground = [UIImage imageNamed:imageName];     

        UITextView *textView = 
                [[UITextView alloc] initWithFrame:CGRectMake(0, 5, 300, 200)];

        textView.backgroundColor = [UIColor clearColor];
        textView.textColor = [UIColor blackColor];
        textView.font = [UIFont fontWithName:@"Helvetica" size:18.0f];

        Purchase *purchase = 
                [[PurchaseModel productsPurchased] objectAtIndex:indexPath.row];

        textView.text = [purchase Title];

        selectedTextView.text = textView.text;


        UIImageView *normalBackground = 
                [[[UIImageView alloc] init] autorelease];

        normalBackground.image = rowBackground;

        [normalBackground insertSubview:textView atIndex:0];

        cell.backgroundView = normalBackground;
        [textView release];
    }

    return cell;
}
+3
1

, , :

- (void)tableView: (UITableView *)tableView willDisplayCell: (UITableViewCell *)cell forRowAtIndexPath: (NSIndexPath *)path {
    [tableView sendSubviewToBack:[tableView viewWithTag:BACKGROUNDVIEW_TAG]];
}

, , allCellsDidLoadForTableView: (UITableView *)tableView.

+2

Source: https://habr.com/ru/post/1741700/


All Articles