UITableView content of cell dont move on editing

老子叫甜甜 提交于 2019-12-25 02:49:09

问题


I have a UITableView with some custom cells. In each cell, there is a ImageView and three labels and get the data from a string array. I have done the layout in my storyboard. The data source is a string array. This works.

Now I have insert a EditButton in the code. Now i can see the EditButton, but when I activate the edit mode the table cell will be resized, but the images and labels dont move.

Can you show me how to move the content of the cell? Who knows a tutorial with UITableView uses EditMode AND storyboards. All tutorials which I have found are based on the "old" Xcode.

Thank you very much

By the way, here is my code:

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    myData = [NSMutableArray arrayWithObjects:
              @"Line1_Label1|Line1_Label2|Line1_Label3",
              @"Line2_Label1|Line2_Label2|Line2_Label3",
              @"Line3_Label1|Line3_Label2|Line3_Label3",
              nil];
    self.navigationItem.leftBarButtonItem = self.editButtonItem;
}


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [myData count];
}

// Return a cell for the table
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // A cell identifier which matches our identifier in IB
    static NSString *CellIdentifier = @"CellIdentifier";

    // Create or reuse a cell
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    // Get the cell label using its tag and set it
    NSString *currentItem = [myData objectAtIndex:indexPath.row];
    NSArray *itemArray = [currentItem componentsSeparatedByString:@"|"];

    UILabel *cellLabel = (UILabel *)[cell viewWithTag:1];
    [cellLabel setText:itemArray[0]];

    UILabel *cellLabel2 = (UILabel *)[cell viewWithTag:3];
    [cellLabel2 setText:itemArray[1]];

    UILabel *cellLabel3 = (UILabel *)[cell viewWithTag:4];
    [cellLabel3 setText:itemArray[2]];

    // get the cell imageview using its tag and set it
    UIImageView *cellImage = (UIImageView *)[cell viewWithTag:2];
    [cellImage setImage:[UIImage imageNamed: @"control.png"]];

    return cell;
}

// Do some customisation of our new view when a table item has been selected
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // Make sure we're referring to the correct segue
    if ([[segue identifier] isEqualToString:@"ShowSelectedMovie"]) {

        // Get reference to the destination view controller
        ItemViewController *vc = [segue destinationViewController];

        // get the selected index
        NSInteger selectedIndex = [[self.tableView indexPathForSelectedRow] row];

        // Pass the name and index of our film
        [vc setSelectedItem:[NSString stringWithFormat:@"%@", [myData objectAtIndex:selectedIndex]]];
        [vc setSelectedIndex:selectedIndex];
    }
}

@end

回答1:


First of all, make an IBOutlet of the tableview in the .h and synthesize it in the .m.

Then make an action to the edit button (if you don't already have one). In the action, write:

    CGRect rect = yourTableView.cell.contentView.frame;
    //Do whatever changes you wish to do with the sizing of the view. origin changes placement and size changes size (duh). Line below is an example.
    rect.origin.y = yourTableView.cell.contentView.frame.origin.y - 20;

    yourTableView.cell.contentView.frame = rect;

This won't be animated, but I think it'll fulfill your purpose.




回答2:


Overwrite the -(void)layoutSubviews{} - method of your custom UITableViewCellController.m or if you don't use a custom UITableViewCellController, try it in your UITableViewController. But I haven't tried it yet with no custom UITableViewCellController.

Something like this will do the trick:

 -(void) layoutSubviews { 
      [super layoutSubviews];
      CGFloat xPositionOfElementInTableCell = 273.0f; /* the position of the element before going into edit mode */

      if (self.isEditing && !self.showingDeleteConfirmation) // if we enter editing mode but not tapped on the red minus at the moment
      {
          xPositionOfElementInTableCell = 241.0f;
      } else if (self.isEditing && self.showingDeleteConfirmation) // after we tappet on the red minus
          xPositionOfElement = 193.0f;
      }


      CGRect frameOfElementInTableCell = self.myElementInTableCell.frame;
      frameOfElementInTableCell.origin.x = xPositionofElement;
      self.myElementInTableCell.frame = frameOfElementInTableCell;
 }

I hope it helps you. The idea for this code is not mine. I found it here in SO, too. Don't know where exactly.



来源:https://stackoverflow.com/questions/14254326/uitableview-content-of-cell-dont-move-on-editing

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!