2017-01-25 2 views
1

Ich habe eine tableview, in der eine Zelle eine textfield und eine button enthält. Ich möchte den Bereich mit der button nur anzeigen, wenn die textfield aktiv wird.Erhöhe die Höhe einer Zelle, wenn das Textfeld darin bearbeitet wird

So für diese Zeit will ich so eine andere height schaffen, dass die textfield ist nur sichtbar, und wenn textfield aktiv wird möchte ich die height of the tableviewcell erhöhen die button zu zeigen. Freundlich helfen.

Meine Zelle ist so etwas.

enter image description here

Wenn das Textfeld nicht ausgewählt ist, ich es angezeigt werden soll, wie:

enter image description here

Wenn das Textfeld ausgewählt ist, ich es wie angezeigt werden soll: enter image description here

Seine nicht verwandt mit "Verwenden von Auto Layout in UITableView für dynamische Zellenlayouts & variable Zeilenhöhen", wie ich th Die Höhe basiert auf dem ausgewählten Textfeld.

+1

Ques nicht klar. –

+0

fügen Sie auch Ihre Codes hinzu. – jo3birdtalk

+0

Haben Sie versucht, die Zelle neu zu laden? –

Antwort

1

Also im Grunde müssen Sie die bestimmte Zelle aktualisieren und seine Höhe erhöhen. Dafür müssen Sie die Methoden UITextFieldDelegate implementieren, um sicherzustellen, dass Sie benachrichtigt werden, wenn Textfeld im Bearbeitungsmodus ist.

Sie müssen auch einen IndexPath der aktuellen Zelle pflegen, um die Höhe für die bestimmte Zelle zu erhöhen.

@property(nonatomic, strong) NSIndexPath *selectedIndexPath; 

Stellen seinen Anfangswert zu nil

Implementieren Delegatmethode

- (void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    UITableViewCell *cell = (UITableViewCell*)textField.superview; 
    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 
    if(indexPath != nil) //Returns nil if cell is not visible 
    { 
     if(self.selectedIndexPath != nil) 
     { 
      //We need to reload two cells - one to hide UIButton of current cell, make visible the new UIButton for which textfield is being currently edited 
      NSIndexPath *previousIndexPath = self.selectedIndexPath; 
      self.selectedIndexPath = indexPath; 
      [self.tableView reloadRowsAtIndexPaths:@[indexPath, previousIndexPath] withRowAnimation:UITableViewRowAnimationNone]; 
     } 
     else 
     { 
      //Reload the cell to show the button 
      self.selectedIndexPath = indexPath; 
      [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone]; 
     } 
    } 
} 

Sobald die Zelle neu geladen wird, stellen Sie sicher, dass Sie die Höhe mit Hilfe aktualisieren Auch UITableViewDelegate Methode

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if(self.selectedIndexPath && [indexPath compare:self.selectedIndexPath] == NSOrderedSame) 
    { 
     return kHeightWithButton; //assuming its some constant defined in the code 
    } 
    return kHeightWithoutButton; 
} 

abhängig davon, wie Sie mit Einschränkungen für Ihre 01 umgehenMöglicherweise müssen Sie die updateConstraints-Methode der Zelle aufrufen. Ein Beispielcode wie be

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CustomTableViewCell *cell; //Assuming the you have some custom class to handle cell 
    cell = [tableView dequeueReusableCellWithIdentifier:@"myCell"]; 

    if(cell == nil) 
    { 
     cell = [[CustomTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"myCell"]; 
     //... code for initialization 
     cell.textField.delegate = self; //set the delegate to self so that we get delegate methods 
    } 

    if(self.selectedIndexPath && [indexPath compare:self.selectedIndexPath] == NSOrderedSame) 
    { 
     cell.button.hidden = NO; 
    } 
    else 
    { 
     cell.button.hidden = YES; 
    } 
    [cell updateConstraints];//update constraint to adjust the UIButton's visibility and constraints 

    //... other code if any 

    return cell; 
} 

Hoffe es hilft!

+1

Ich hatte bereits so etwas mit benutzerdefinierten Delegaten aus der Zelle implementiert. Mein Ansatz war ähnlich, eine positive und akzeptierte Antwort. Und ich war Swift 3. Danke für solche Detail-Ausarbeitung und Zeit zu finden, zu dis. Sehr geschätzt. Wenn Sie meine Frage passend finden, bitte. –

+0

Großartig! Danke OK. Ich habe es mit Objective-C versucht –

Verwandte Themen