Frage

Für das iPhone, ist es möglich, eine UITableView so zu konfigurieren, dass es Mehrfachauswahl erlauben?

Ich habe versucht zwingenden -setSelected:animated: für jeden UITableViewCell, sondern versuchen, das gewünschte Verhalten schwierig zu fälschen, da es schwierig ist, die wirklichen unselections von denen zu trennen, wo die UITableView denkt, dass ich aufgrund Auswahl einer anderen Zelle nicht ausgewählt haben!

Hope jemand helfen kann!

Danke,

Nick.

War es hilfreich?

Lösung

Der beste Weg, dies zu tun pro ausgewählter Zeile ein Häkchen sein würde.

Sie können das tun, indem Sie die accessoryType auf den ausgewählten UITableViewCell Instanzen UITableViewCelAccessoryCheckmark Einstellung.

, um die Zeile zu deaktivieren, setzen Sie es zurück zu UITableViewCellAccessoryNone.

aufzuzählen, die Zellen / Zeilen ausgewählt wurden (zum Beispiel auf eine Schaltfläche klicken), iterieren einfach über die Zellen der Tabelle für UITableViewCellAccessoryCheckmark suchen. Oder verwaltet einige NSSet oder dergleichen in der Tabellenansicht Delegierten in der „nicht gewählt“ Delegatmethoden.

Andere Tipps

Nach der Eigenschaft sollte gut funktionieren, wenn Sie App für iOS5.0 + Entwicklung sind

self.tableView.allowsMultipleSelection = YES;

Verwenden Sie den folgenden Code, um die Zelle Zubehörtyp 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;
}

Jeff Lamarche hat eine Anleitung, wie dies hier zu tun:

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

Ich kann das nicht versucht haben, aber es ist für eine Weile auf der Rückseite meines Geistes gewesen, den Tag zu wissen, wird kommen, wenn ich es brauche.

I zurückportiert allowsMultipleSelectionDuringEditing und allowsMultipleSelection von iOS5 auf ältere iOS. Sie können es gabeln unter https://github.com/ud7/UDTableView-allowsMultipleSelection

Es ist Drop-in-Ersatz und nur, was Sie tun müssen, ist Veränderung UITableView zu UDTableView (im Code oder Interface Builder)

Von der HIG:

  

Tabellenansichten Feedback, wenn die Benutzer wählen Sie Listeneinträge. Insbesondere dann, wenn ein Element kann ausgewählt werden, die   Reihe mit dem Artikel, hebt kurz, wenn ein Benutzer auswählt, um es zu zeigen, dass die Auswahl empfangen wurde.   Dann wird eine sofortige Aktion tritt: Entweder eine neue Ansicht enthüllt wird oder die Zeile zeigt ein Häkchen, um anzuzeigen,   dass das Element ausgewählt wurde. Die Zeile bleibt nie hervorgehoben, weil Tabellenansichten ein nicht angezeigt   persistent ausgewählter Zustand.

Sie müssen Ihre eigene Mehrfachauswahl Stil rollen, entweder mit so etwas wie E-Mail oder über das Häkchen Zubehör auf Ihren Zellen.

Typen für mehrere Auswahl müssen 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;
}

Wenn Sie versuchen, etwas wie Mail der Mehrfachauswahl (löscht Mail, zum Beispiel) zu tun, dann sind Sie wahrscheinlich selbst gehen zu müssen, verwalten alle der Auswahl. Mehrere Zeilenauswahl ist nicht etwas, das auf dem iPhone-Standard ist. Mail löst dieses Häkchen, indem Sie angeben, welche Zeilen ausgewählt wurden.

blau markierte Zeile als Indikator, ob eine Zeile ausgewählt ist, entsprechend tatsächlich abgeraten wird die HIG Seite 121. Ankreuzungen 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 Ihre Gruppierungs oder wie immer Sie die Daten, von denen ausgewählt wurden gespeichert werden soll.

Ich war für das gleiche Problem gesucht und die Antwort von Bhavin Chitroda sovled es für mich, aber mit einiger zusätzlich das Häkchen zu halten, wie es war beim Scrollen.

- (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;
        }

}

Der Zusatz:

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

    return cell;

}

Hinweis: Das funktioniert nicht in iOS 4 oder höher. Dies ist eine private, nicht dokumentierte konstant. Verwenden Sie es nicht.

Wenn Sie nicht planen, Ihre App im App Store zu senden, können Sie mehrreihigen Bearbeitungsmodus aufrufen, indem Sie die folgende Methode in Ihrem UITableViewController delegieren Implementierung:

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

mit iOS4.3 geprüft - 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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top