Wie arbeite ich mit UITextFields in UITableViewCells?

  • Ich habe 10 UITableViewCells in meiner UITableView. Jede Zelle hat ein UITextField. Sie laden gut, aber ich brauche einen Weg, um den Text jeder Zelle auf die zugehörige Zeichenfolge festzulegen.

    Gibt es einen Delegierten von UITextField, mit dem ich dies tun kann, und wie kann ich feststellen, welches Textfeld zu NSString usw. gehört?

    Bearbeiten:

    Hier ist ein Bild meiner tableView. Ich möchte, dass Text vom Server in jede Zelle textfield geladen wird, und der Benutzer kann ihn bearbeiten. Wenn auf dem Server keine Daten vorhanden sind, ist textfield leer und der Benutzer kann Daten hinzufügen und die Synchronisierung erfolgt zurück.

    Ich habe ein NSString für erstellt jede Zelle wie temperatureString, pulseString usw.

    Wie arbeite ich mit UITextFields in UITableViewCells?

    23 November 2011
5 answers
  • Sie müssen einen Verweis auf jedes Textfeld speichern, wenn sie erstellt werden, also in:

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

    Methode, Sie würden diese Zeile hinzufügen:

     [myTextFieldArray addObject: cell.textField];
     

    Angenommen textField ist die Eigenschaft für Ihre benutzerdefinierte Tabellenansicht cell.

    Sie würden auch den Text innerhalb des Textfeldes direkt nach der if (cell == nil) -Methode festlegen.

    Mit den Delegat-Methoden können Sie einfach wissen, wann Text eingegeben wird, usw.

    BEARBEITEN:

    Berücksichtigen Sie, was Sie hinzugefügt haben Ich stimme mit Sid und CStreel überein. Erstellen Sie die Tags für jeden Wert:

     #define kTemperatureTag 0
    #define kPulseTag 1
    // etc.
     

    Als Alternative zu CStreel würde ich die entsprechenden Informationen zuweisen / abrufen indexPath-Zeile, und machen Sie sich keine Sorgen über das Zuweisen von Tags, da sie dasselbe sind, wenn Sie Ihre Tags bei Null beginnen.

    >

    Und:

     - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
      UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
      NSInteger index = [indexPath row];
        switch(index){
            case kTemperatureTag:
              [self.childAppointmentDictionary addObject:cell.textField.text forKey:@"temperature"];
     
    23 November 2011
    TigerCoding
  • Bearbeiten: In Bezug auf die neuen Informationen ist dies meine neue Lösung.

    Sie fügen also in jede Zelle UITextField ein Setzen des Tags jeder Zelle Setzen Sie das Tag für jedes UITextField

    Zuerst definieren Sie Ihre Tags

     #define DESCRIPTIVE_TAG_VALUE_1 10
    #define DESCRIPTIVE_TAG_VALUE_2 11
    #define DESCRIPTIVE_TAG_VALUE_3 12
    ...
     

    Verwenden Sie diese in Ihrem UITextField -Delegierten, um zu bestimmen, welcher UITextField zu welchem ​​NSString gehört. Dies ist der Fall, wenn Sie mit jedem Update synchronisieren, falls dies nicht der Fall ist. Rufen Sie dann einen Verweis auf UITableView ab und rufen Sie die einzelnen Textwerte jeder Unteransicht einer Zelle ab, deren Tag einem Ihrer Definitionen entspricht (wiederum in einer switch-Anweisung).

    Wenn Sie wieder mit iOS-Tags arbeiten, sind Sie Ihre Freunde.

    ODER

    Sie haben auch gesagt, dass Sie halten Als Verweis auf jedes NSString können Sie einfach einen Verweis auf jedes UITextField halten, stattdessen müssen Sie bei der Synchronisierung lediglich von jedem Ihrer UITextField -Referenzen zurückgreifen.

    Die bewährten Methoden von Apple sagen jedoch aus, dass im Umgang mit unterschiedlichen Ansichten eindeutige Tags verwendet werden müssen. Es liegt wirklich an dir,

    23 November 2011
    CStreel
  • UITextfield ist eine Unterklasse von UIView, die über eine 'Tag'-Eigenschaft verfügt. Sie können die indexPath.row der Zelle als Kennung des Textfelds zuweisen.

    22 November 2011
    SidIlker Baltaci
  • Sie sollten den Text in tableView: cellForRowAtIndexPath:

    einstellen.

    Es klingt so, als hätten Sie eine bestimmte Reihenfolge, in der Ihre Artikel erscheinen sollen Zeit für die Verwendung eines NSArray anstelle eines NSDictionary.

    Sie können in init oder initwithNibName eine beibehaltene Array-Eigenschaft erstellen:

     self.myListArray = [NSArray arrayWithObjects:@"fever", @"cough", @"runny nose", nil];
     

    Wenn Sie davon ausgehen, dass Sie nur einen Abschnitt haben, würden Sie cell.textField.text = [self.myListArray objectAtIndex:indexPath.row];

    tun. Gibt es a Grund dafür, dass Sie ein NSDictionary verwenden, anstatt ein NSArray?

    22 November 2011
    averydev
  • Basierend auf Ihrem Kommentar zu @Javy (der zusätzliche Informationen enthält, die Sie der ursprünglichen Frage hinzufügen sollten), könnten Sie Folgendes tun:

     UITableViewCell *cell = nil;
    NSString *key = nil;
    
    switch (indexPath.row)
    {
        case 0:
            cell = self.temperatureCell;
            key = @"temperature";
            break;
        case 1:
            // Do other cases similarly ...
    }
    
    NSString *text = [self.childAppointmentDictionary objectForKey:key];
    cell.textField.text = text;
     
    22 November 2011
    jlehr