Outlineview - maximal selektierbare Elemente

  • Outlineview - maximal selektierbare Elemente

    Ich drehe mich gerade im Kreis. Ich sehe zwar die Ursache meine Problems, finde aber keinen Ausweg.
    Ich habe eine OutlineView und möchte, dass daraus maximal 8 Einträge selektiert werden können.

    Ich habe folgendes in den Delegates definiert :

    Quellcode

    1. func outlineView(outlineView: NSOutlineView, shouldSelectItem item: AnyObject) -> Bool
    2. {
    3. if outlineView.selectedRowIndexes.count < 8 && item.representedObject?!.valueForKey("children") == nil {
    4. return true
    5. }
    6. else {
    7. return false
    8. }
    9. }

    Weiterhin :

    Quellcode

    1. func outlineViewSelectionDidChange(notification: NSNotification) {
    2. var selected : NSIndexSet
    3. var first : Int
    4. selectedDyes.removeAllObjects()
    5. selected = outlineview.selectedRowIndexes
    6. first = selected.firstIndex
    7. for _ in 0..<selected.count {
    8. if first != NSNotFound && selected.count <= 8 {
    9. selectedDyes.addObject((outlineview.itemAtRow(first)?.representedObject)!)
    10. first = selected.indexGreaterThanIndex(first)
    11. }
    12. }
    13. selectedDyesArray = selectedDyes
    14. }
    Alles anzeigen
    Das funktioniert solange, bis 8 Elemente selektiert sind. Ein 9. Klicken wird wunschgemäss ignoriert.
    Allerdings kann ich nun den 8. Eintrag durch erneutes Anklicken nicht mehr abwählen, da nun jeglicher Klick ignoriert wird.

    Kann mir jemand sagen, wie ich das Klicken im Sinne des Abwählens erlaube, ein weiteres Auswählen aber nach wie vor unterbinde?

    Danke für jeden Tipp!
    Hans
  • Stimmt, das ist der Ansatz. :thumbsup: Wieder mal den Wald vor lauter Bäumen nicht gesehen.

    Quellcode

    1. func outlineView(outlineView: NSOutlineView, shouldSelectItem item: AnyObject) -> Bool
    2. {
    3. if outlineView.selectedRowIndexes.count < 8 && item.representedObject?!.valueForKey("children") == nil
    4. {
    5. return true
    6. }
    7. else if outlineView.selectedRowIndexes.count == 8 && outlineView.selectedRowIndexes.containsIndex(outlineView.clickedRow) {
    8. return true
    9. }
    10. else {
    11. return false
    12. }
    13. }
    Alles anzeigen
    Und damit funktioniert alles. Danke!!