it-swarm.com.de

Ist es möglich, eine UITableView für die Mehrfachauswahl zu konfigurieren?

Ist es für das iPhone möglich, ein UITableView so zu konfigurieren, dass eine Mehrfachauswahl möglich ist?

Ich habe versucht, -setSelected:animated: für jede UITableViewCell zu überschreiben. Der Versuch, das erforderliche Verhalten zu täuschen, ist jedoch schwierig, da es schwierig ist, die tatsächliche Auswahl der Abgrenzungen von denen zu trennen, bei denen UITableView der Meinung ist, dass ich die Auswahl einer anderen Zelle nicht ausgewählt habe.

Hoffe, jemand kann helfen!

Vielen Dank,

Nick.

40
Nick Cartwright

Am besten tun Sie dies, indem Sie für jede ausgewählte Zeile ein Häkchen setzen.

Sie können dies tun, indem Sie den AccessoryType für die ausgewählten UITableViewCell-Instanzen auf UITableViewCelAccessoryCheckmark setzen.

Um die Auswahl der Zeile aufzuheben, setzen Sie sie auf UITableViewCellAccessoryNone zurück.

Um aufzählen, welche Zellen/Zeilen ausgewählt wurden (z. B. beim Klicken auf eine Schaltfläche), durchlaufen Sie einfach die Zellen der Tabelle und suchen nach UITableViewCellAccessoryCheckmark. Oder verwalten Sie ein NSSet oder ähnliches in Ihrer Tabellensichtdelegation in den Delegatmethoden "Auswahl ausführen".

36
z8000

Die folgende Eigenschaft sollte funktionieren, wenn Sie eine App für iOS5.0 + entwickeln

self.tableView.allowsMultipleSelection = YES;
39
Hamdi

Verwenden Sie den folgenden Code, um die Zellenzusatztypen einzurichten:

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *thisCell = [tableView cellForRowAtIndexPath:indexPath];


    if (thisCell.accessoryType == UITableViewCellAccessoryNone) {
        thisCell.accessoryType = UITableViewCellAccessoryCheckmark;

    }else{
        thisCell.accessoryType = UITableViewCellAccessoryNone;

    }
}

- (UITableViewCellAccessoryType)tableView:(UITableView *)tableView accessoryTypeForRowWithIndexPath:(NSIndexPath *)indexPath {

//add your own code to set the cell accesory type.
return UITableViewCellAccessoryNone;
}
25

Jeff Lamarche hat ein Tutorial, wie man das hier macht:

http://iphonedevelopment.blogspot.com/2008/10/table-view-multi-row-edit-mode.html

Ich habe den Code nicht ausprobiert, aber er ist eine Zeitlang im Hinterkopf, weil ich weiß, dass der Tag kommen wird, wenn ich ihn brauche.

24
oldbeamer

Ich habe allowsMultipleSelectionDuringEditing und allowsMultipleSelection von iOS5 auf ältere iOS portiert. Sie können es unter https://github.com/ud7/UDTableView-allowsMultipleSelection verzweigen. 

Sie müssen nicht ersetzt werden, und Sie müssen nur UITableView in UDTableView ändern (in Code oder Interface Builder).

11
RolandasR

Von der HIG: 

Tabellensichten geben Feedback, wenn Benutzer Listenelemente auswählen. Insbesondere wenn ein Element ausgewählt werden kann, wird die Die Zeile mit dem Element wird kurz hervorgehoben, wenn ein Benutzer ihn auswählt, um anzuzeigen, dass die Auswahl empfangen wurde. Dann erfolgt eine sofortige Aktion: Entweder wird eine neue Ansicht angezeigt, oder in der Zeile wird ein Häkchen mit der Markierung. dass der Artikel ausgewählt wurde. Die Zeile bleibt nie hervorgehoben, da in Tabellensichten kein .__ angezeigt wird. beständiger ausgewählter Zustand. 

Sie müssen Ihren eigenen Mehrfachauswahlstil erstellen, entweder mit Mail oder mit dem Häkchen in den Zellen.

5
Ben Gottlieb

Jungs für die Mehrfachauswahl brauchen Sie nur

self.tableView.allowsMultipleSelection = YES;

auf viewDidLoad und

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *tableViewCell = [tableView cellForRowAtIndexPath:indexPath];
    tableViewCell.accessoryView.hidden = NO; 
    // if you don't use custom image tableViewCell.accessoryType = UITableViewCellAccessoryCheckmark;
}

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *tableViewCell = [tableView cellForRowAtIndexPath:indexPath];
    tableViewCell.accessoryView.hidden = YES;
    // if you don't use custom image tableViewCell.accessoryType = UITableViewCellAccessoryNone;
}
5

blau hervorgehobene Zeile Als Indikator dafür, ob eine Zeile ausgewählt ist, wird entsprechend der HIG Seite 121 tatsächlich abgeraten. Haken setzen den Trick.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    int selectedRow = indexPath.row;
    cout << "selected Row: " << selectedRow << endl;
    UITableViewCell *indexPathForCell = [tableView cellForRowAtIndexPath:indexPath];
    if (indexPathForCell.accessoryType == UITableViewCellAccessoryNone) {
        indexPathForCell.accessoryType = UITableViewCellAccessoryCheckmark;
    } else {
        indexPathForCell.accessoryType = UITableViewCellAccessoryNone;
    }

}

fügen Sie dann Ihr Array hinzu oder wie immer Sie die Daten speichern möchten, deren Daten ausgewählt wurden.

2
John Riselvato

Wenn Sie versuchen, etwas wie die Multiple-Select-Funktion von Mail auszuführen (zum Beispiel zum Löschen von E-Mails), müssen Sie wahrscheinlich die gesamte Auswahl selbst vornehmen. Mehrfachauswahl ist beim iPhone nicht Standard. Mail löst dies, indem Häkchen verwendet werden, um anzugeben, welche Zeilen ausgewählt wurden.

2
August

Ich war auf der Suche nach dem gleichen Problem und der Antwort von Bhavin Chitroda war für mich eine Devise, jedoch mit einigen zusätzlichen Hinweisen, dass das Häkchen wie beim Scrollen beibehalten wurde.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

        UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
        if ( [array indexOfObject:indexPath] == NSNotFound ) {
            [array addObject:indexPath];
            cell.accessoryType = UITableViewCellAccessoryCheckmark;
        } else {
            [array removeObject:indexPath];
            cell.accessoryType = UITableViewCellAccessoryNone;
        }

}

Die Zugabe:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
// Your code here
.
.
.
    if ( [array indexOfObject:indexPath] == NSNotFound ) {
        cell.accessoryType = UITableViewCellAccessoryNone;
    } else {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    }

    return cell;

}
2
Omar Elgendy

Hinweis: Dies funktioniert nicht unter iOS 4+. Dies ist eine private, undokumentierte Konstante. Benutze es nicht.

Wenn Sie nicht planen, Ihre App an den App Store zu senden, können Sie den mehrzeiligen Bearbeitungsmodus aufrufen, indem Sie die folgende Methode in Ihren UITableViewController-Delegaten implementieren:

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 3; // Undocumented constant
}
1
titaniumdecoy

Getestet mit iOS 4.3 - 6.0

-(void)searchDisplayControllerDidBeginSearch:(UISearchDisplayController *)controller {

    if ([controller.searchResultsTableView respondsToSelector:@selector(allowsMultipleSelectionDuringEditing)]) {
        controller.searchResultsTableView.allowsMultipleSelectionDuringEditing = YES;
    }
    else {
        controller.searchResultsTableView.allowsSelectionDuringEditing = YES;
    }
}

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return UITableViewCellAccessoryCheckmark;
}
0
Adriana