Frage

habe ich ein UITableView mit 15 Zellen, die jeweils mit einem separaten Textfeld in ihm. Ich habe UITextViewDelegate umgesetzt und ich bin zu empfangen geändert Textview-Daten können mit textViewDidChange (usw.). Aber ich ein großes Problem noch habe, wie kann ich wissen, welche Textview dies geschickt, (das heißt, in der Zelle wurde die Textview geändert?)

Es ist interessant, so viel Arbeits haben, noch nicht genau wissen, woher es kommt.

Eine ganze Reihe von Code zur Verfügung, wenn erforderlich.

Viele Grüße @norskben

Code

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

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

        //Big Text Box
        UITextView *detailLabel = [[UITextView alloc] initWithFrame:CGRectMake(30, 80, CONST_Cell_width, 150)];
        detailLabel.tag = 20;
        [cell.contentView addSubview:detailLabel];

    }   


UITextView * detailLabel = (UITextView *) [cell.contentView viewWithTag:20];
War es hilfreich?

Lösung

Sie können Tags (Integer) zu den verschiedenen Ansichten zuweisen und die Tag-Nummer abfragen, um zu sehen, welche die Methode aufgerufen Ansicht. Suchen Sie die Tag-Eigenschaft auf der Ansicht:

tag

The receiver’s tag, an integer that you can use to identify view objects in your application.

@property(nonatomic) NSInteger tag

siehe hier

Andere Tipps

Nicht in meiner Entwicklung Maschine, aber wenn Sie die UITextView erstellen sollten Sie in der Lage sein, es einen Tag zuweisen. Ich denke, es ist [myTextView setTag: x]; wobei x eine ganze Zahl ist.

Dann in dem TextViewDidChange Einsatz if (textview.tag == x) { //do something } else if (textview.tag == y) { //do something else and so on }

Ich hoffe, das hilft ein wenig.

Die Textansichten übergeben einen Verweis auf sich selbst in jedem Delegatmethode, so dass Sie wissen, was man es geschickt. Um eine Verbindung zu der Zelle zu machen, würde ich setze jede tag Unterkunft Textansicht auf einen anderen Wert, entspricht die Zeile der Zelle, sie sind in.

Hier ist eine wichtige Frage: Ist statisch Ihre Textfelder oder können sie im Laufe der Zeit ändern? Wenn sie nicht ändern wird (der Benutzer kann nicht die Anzahl der Zellen verändern oder mehr später hinzufügen), dann können Sie eine neue Textfield für jede Zelle erklären. Ich habe etwas Ähnliches in meiner apps. Ich habe zwei Textfelder und je nachdem, welche Textfield gerade aktiv ist, der Delegierte tut etwas anderes.

Deklarieren getrennte Textfelder in der Kopfzeile

UITextField *textField1;
UITextField *textField2;
UITextField *textField3;

in der delegierte Methode, Verwendung, wenn Anweisungsblocks, um herauszufinden, welche Textfield verändert:

if (textField == textField1) {
    //do something
} else if (textField == myTextField2) {
    //something else
}

Beachten Sie, dass dies wirklich funktioniert nur, wenn Ihre Sicht statisch ist.

Hope, das hilft

Haben Sie einen großen Tag

Wenn Sie die UITableView Zellen für die Ereignisquelle UITextView sind, Iterierte nur über die Zellen, dass der Benutzer zur Zeit sehen. Dies kann mit dem folgenden UITableView Verfahren erhalten werden:

- (NSArray *)visibleCells
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top