Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iPhone UITableView - Delete Button

I am using the 'swipe to delete' functionality of the UITableView.

The problem is I am using a customised UITableViewCell which is created on a per item basis in

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

I need to alter the position of the delete button (simply to move it around 10px to the left), how would I go about doing this?

Here is my existing code for creating the cell:

- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {     NSLog(@"cellForRowAtIndexPath"); #if USE_CUSTOM_DRAWING     const NSInteger TOP_LABEL_TAG = 1001;     const NSInteger BOTTOM_LABEL_TAG = 1002;     UILabel *topLabel;     UILabel *bottomLabel; #endif      static NSString *CellIdentifier = @"Cell";     UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier];     if (cell == nil)     {         //         // Create the cell.         //         cell =         [[[UITableViewCell alloc]           initWithFrame:CGRectZero           reuseIdentifier:CellIdentifier]          autorelease];  #if USE_CUSTOM_DRAWING           const CGFloat LABEL_HEIGHT = 20;         UIImage *image = [UIImage imageNamed:@"trans_clock.png"];          //         // Create the label for the top row of text         //         topLabel =         [[[UILabel alloc]           initWithFrame:           CGRectMake(                      image.size.width + 2.0 * cell.indentationWidth,                      0.5 * (aTableView.rowHeight - 2 * LABEL_HEIGHT),                      aTableView.bounds.size.width -                      image.size.width - 4.0 * cell.indentationWidth                      ,                      LABEL_HEIGHT)]          autorelease];         [cell.contentView addSubview:topLabel];          //         // Configure the properties for the text that are the same on every row         //         topLabel.tag = TOP_LABEL_TAG;         topLabel.backgroundColor = [UIColor clearColor];         topLabel.textColor = fontColor;         topLabel.highlightedTextColor = [UIColor colorWithRed:1.0 green:1.0 blue:0.9 alpha:1.0];         topLabel.font = [UIFont systemFontOfSize:[UIFont labelFontSize]];          //         // Create the label for the top row of text         //         bottomLabel =         [[[UILabel alloc]           initWithFrame:           CGRectMake(                      image.size.width + 2.0 * cell.indentationWidth,                      0.5 * (aTableView.rowHeight - 2 * LABEL_HEIGHT) + LABEL_HEIGHT,                      aTableView.bounds.size.width -                      image.size.width - 4.0 * cell.indentationWidth                      ,                      LABEL_HEIGHT)]          autorelease];         [cell.contentView addSubview:bottomLabel];          //         // Configure the properties for the text that are the same on every row         //         bottomLabel.tag = BOTTOM_LABEL_TAG;         bottomLabel.backgroundColor = [UIColor clearColor];         bottomLabel.textColor = fontColor;         bottomLabel.highlightedTextColor = [UIColor colorWithRed:1.0 green:1.0 blue:0.9 alpha:1.0];         bottomLabel.font = [UIFont systemFontOfSize:[UIFont labelFontSize] - 2];          //         // Create a background image view.         //         cell.backgroundView =         [[[UIImageView alloc] init] autorelease];         cell.selectedBackgroundView =         [[[UIImageView alloc] init] autorelease]; #endif     }  #if USE_CUSTOM_DRAWING     else     {         topLabel = (UILabel *)[cell viewWithTag:TOP_LABEL_TAG];         bottomLabel = (UILabel *)[cell viewWithTag:BOTTOM_LABEL_TAG];     }     topLabel.text  = @"Example Text";     topLabel.textColor = fontColor;      bottomLabel.text = @"More Example Text";     bottomLabel.textColor = fontColor;      //     // Set the background and selected background images for the text.     // Since we will round the corners at the top and bottom of sections, we     // need to conditionally choose the images based on the row index and the     // number of rows in the section.     //     UIImage *rowBackground;     UIImage *selectionBackground;     NSInteger sectionRows = [aTableView numberOfRowsInSection:[indexPath section]];     NSInteger row = [indexPath row];     if (row == 0 && row == sectionRows - 1)     {         rowBackground = [UIImage imageNamed:@"topAndBottomRow.png"];         selectionBackground = [UIImage imageNamed:@"topAndBottomRowSelected.png"];     }     else if (row == 0)     {         rowBackground = [UIImage imageNamed:@"topRow.png"];         selectionBackground = [UIImage imageNamed:@"topRowSelected.png"];     }     else if (row == sectionRows - 1)     {         rowBackground = [UIImage imageNamed:@"bottomRow.png"];         selectionBackground = [UIImage imageNamed:@"bottomRowSelected.png"];     }     else     {         rowBackground = [UIImage imageNamed:@"middleRow.png"];         selectionBackground = [UIImage imageNamed:@"middleRowSelected.png"];     }     ((UIImageView *)cell.backgroundView).image = rowBackground;     ((UIImageView *)cell.selectedBackgroundView).image = selectionBackground;      cell.imageView.image = [UIImage imageNamed:@"Example_Image.png"]; #else     cell.text = @"Example"; #endif     return cell; } 
like image 673
Mick Walker Avatar asked Jan 20 '10 19:01

Mick Walker


1 Answers

For me the best way to solve this was overriding -(void)layoutSubviews in MyCell:UITableViewCell

Here you can see not only the Delete button custom position, but also repositioning the Edit and Reorder controls for Edit mode

- (void)layoutSubviews {     [super layoutSubviews];      [UIView beginAnimations:nil context:NULL];     [UIView setAnimationBeginsFromCurrentState:YES];     [UIView setAnimationDuration:0.0f];      for (UIView *subview in self.subviews) {           if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"]) {              CGRect newFrame = subview.frame;             newFrame.origin.x = 200;             subview.frame = newFrame;         }         else if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellEditControl"]) {                          CGRect newFrame = subview.frame;             newFrame.origin.x = 100;             subview.frame = newFrame;         }         else if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellReorderControl"]) {                          CGRect newFrame = subview.frame;             newFrame.origin.x = 200;             subview.frame = newFrame;         }     }     [UIView commitAnimations]; } 
like image 125
Remizorrr Avatar answered Oct 11 '22 06:10

Remizorrr