Ich habe benutzerdefinierte UITableViewCell
s sowie Kopf- und Fußzeilen. Jeder von ihnen hat UITextField
s in Spalten, die in einer Reihe stehen. Die Positionierung dieser Säulen wird prozentual nach der Breite der UITableView
bestimmt. (d. h., so nutzt es den breiteren Bildschirm aus, wenn es in der Landschaft geöffnet wird).Neu zeichnen UITableViewCells auf Rotation
Das Problem, das ich habe, ist, wenn ich die Ansicht drehen, sobald der View-Controller geladen hat. Die UITableViewCell
s verwenden immer noch die alte Positionierung.
Nachdem ich SO gesucht habe, habe ich jetzt die didRotateFromInterfaceOrientation:
implementiert und Daten in dieser Methode neu geladen.
Dies hat jetzt die Kopfzeilen und Fußzeilen sortiert. Die UITableViewCell
s sind jedoch immer noch in ihrem vorgedrehten Format. Gibt es eine Möglichkeit, die Tabelle zu zwingen, den gesamten Inhalt vollständig neu zu zeichnen?
EDIT: Mein tableView:cellForIndexPath:
Code:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"CustomCell";
UITextField *TextField1, *TextField2, *TextField3, *TextField4, *TextField5;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
float width = (self.tableView.frame.size.width - 68);
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
TextField1 = [[UITextField alloc] initWithFrame:CGRectMake(((width*position1)+10.0), 10.0, (width*width1), 31.0)];
TextField1.tag = 1;
TextField2 = [[UITextField alloc] initWithFrame:CGRectMake((width*position2), 10.0, (width*width2), 31.0)];
TextField2.tag = 2;
TextField3 = [[UITextField alloc] initWithFrame:CGRectMake((width*position3), 10.0, (width*width3), 31.0)];
TextField3.tag = 3;
TextField4 = [[UITextField alloc] initWithFrame:CGRectMake((width*position4), 10.0, (width*width4), 31.0)];
TextField4.tag = 4;
TextField5 = [[UITextField alloc] initWithFrame:CGRectMake((width*position5), 10.0, ((width*width5)-40.0-editingWidth), 31.0)];
TextField5.tag = 5;
cell.accessoryType = UITableViewCellAccessoryNone;
[cell.contentView addSubview:TextField1];
[cell.contentView addSubview:TextField2];
[cell.contentView addSubview:TextField3];
[cell.contentView addSubview:TextField4];
[cell.contentView addSubview:TextField5];
[TextField1 release];
[TextField2 release];
[TextField3 release];
[TextField4 release];
[TextField5 release];
} else {
TextField1 = (UITextField *)[cell.contentView viewWithTag:1];
TextField2 = (UITextField *)[cell.contentView viewWithTag:2];
TextField3 = (UITextField *)[cell.contentView viewWithTag:3];
TextField4 = (UITextField *)[cell.contentView viewWithTag:4];
TextField5 = (UITextField *)[cell.contentView viewWithTag:5];
}
// Configure the cell...
// Clear cell contents
TextField1.text = @"";
TextField2.text = @"";
TextField3.text = @"";
TextField4.text = @"";
TextField5.text = @"";
int sectionCount = 0;
sectionCount = [workoutSectionsMutableArray count];
// Repopulate cells
NSMutableArray *cellDataArray = [self retrieveCellDataAtIndexPath:indexPath];
TextField1.text = [[cellDataArray objectAtIndex:indexPath.row] 1];
TextField2.text = [[cellDataArray objectAtIndex:indexPath.row] 2];
TextField3.text = [[cellDataArray objectAtIndex:indexPath.row] 3];
TextField4.text = [[cellDataArray objectAtIndex:indexPath.row] 4];
TextField5.text = [[cellDataArray objectAtIndex:indexPath.row] 5];
}
return cell;
}
Meine didRotateFromInterfaceOrientation:
Methode:
-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation) fromInterfaceOrientation {
[self.tableView reloadData];
}
Setzen Sie einen Haltepunkt in Ihrer "Zelle für den Indexpfad", drehen Sie das Gerät und sehen Sie, (1) es wird aufgerufen, und (2) es erzeugt Textfelder der richtigen Breite. – dasblinkenlight
Vielleicht könnten Sie den Code, wo Sie die Neupositionierung der Spalten tun, posten, es scheint, dass dies ein einfaches Problem sein sollte, zu beheben. – Darren
Ich habe den Code wie gewünscht eingefügt. Wie Sie sehen können, habe ich die Zellen mithilfe von Berechnungen eingerichtet, die entweder für Hoch- oder Querformat ausgerichtet sind. Der Befehl [Daten neu laden] reicht jedoch nicht aus, um Zellen neu zu zeichnen, so dass die textFields ihr vorhandenes Layout beibehalten, während die Kopf- und Fußzeilen neu gezeichnet werden. –