Interface Builder: meerdere buttons op een outlet?

Ik ben bezig om een kaartspelletje te maken in XCode en Interface Builder. Nu merk ik dat er ergens iets wringt in het ontwerp van mijn programma. Het werkt al grotendeels trouwens...

Kleine uitleg van het spel: er liggen twaalf kaarten op tafel, in drie rijen van vier. De gebruiker klikt er drie aan, als die drie aan bepaalde voorwaarden voldoen vormen ze een ‘set’ en gaan ze van tafel. Er worden dan drie nieuwe kaarten gedeeld.

De kaarten zijn geïmplementeerd als extensies op NSButton, wiens acties worden verwerkt door een Controller object. Die slaat de zenders van acties tijdelijk op (totaal maximaal drie stuks), en als er een ‘set’ van tafel gaat worden er drie nieuwe plaatjes gehangen aan die opgeslagen kaarten.

[b:776707b027]Probleem[/b:776707b027] is nu dat de Controller geen toegang heeft tot alle kaarten die op tafel liggen. Hij is afhankelijk van de acties die naar hem gestuurd worden. Ik zou graag in de controller wel een array van NSButtons tot mijn beschikking hebben, bijvoorbeeld om hints te geven. Een mogelijke oplossing zou zijn om aan de Controller twaalf outlets te hangen, en die in interface builder naar de kaarten te slepen. Dat lijkt me echter een beetje omslachtig (en bovendien wil ik liever een Array, en niet twaalf losse variabelen). Is er een manier om meerdere objecten aan één outlet te hangen, en ze een array te laten vormen?

Als ik je verhaal goed heb begrepen ben je op zoek naar NSMatrix. Daarmee kan je een heel grid van buttons (of andere widgets) aanmaken in Interface Builder, die je gewoon aan 1 outlet hangt. Ik heb dat in een boek van O'Reilly gelezen destijds. Via Google kwam ik er achter dat dat hoofdstuk als sample chapter nu ook online te vinden is:

http://www.oreilly.de/catalog/buildcocoa/chapter/ch05.html

Vanaf “Adding Controls in a Window” staat het zo ongeveer beschreven. Het boek is het aanschaffen overigens waard :slight_smile:

Misschien heb je hier wat aan?

Bedankt Ivo, dit was inderdaad wat ik zocht! Ik zit nu nog met een erg klein probleempje, waarvoor jij (of iemand anders) misschien ook de oplossing weet. Als ik zo'n NSMatrix-ding heb, wordt nu de actieve NSButtonCell gearceerd met een blauw randje. Dit wil ik niet, maar ik weet niet hoe ik het uitzet. Ideeën?

Ik heb geprobeerd het effect wat je beschrijft te reproduceren, maar bij mij werkt alles steeds zonder problemen. Zou je de source online willen zetten, liefst met zo min mogelijk irrelevante code? Mailen mag ook, stuur me dan een privebericht met je mailadres of icq/msn, dat is wat makkelijker met overleggen.

In goed overleg met Ivo de oplossing gevonden: maak een subclass van NSButtonCell, en override de method - (FocusRingType)focusRingType :

[code:1:b2afcae42b]

  • (NSFocusRingType)focusRingType
    {
    return NSFocusRingTypeNone;
    }
    [/code:1:b2afcae42b]

Het mag alleen van de Human Interface Guidelines niet…

Soms moet je regels gewoon breken :P als dat:

1 : geen nadelen oplevert !!!
2 : voordelen biedt

Daarbij Apple houdt zich er ook niet strikt aan (Safari… brushed metal :innocent: MAAR ik zou het ook niet in Aqua willen :wink: … Safari is mooier in BM en er zijn geen nadelen dus…)… mooi dat je ze wil volgen maar… denk er nog eens over na (tenzij je nog een andere oplossing hebt gevonden.

Ik zou niet in functionaliteit willen inboeten omdat er iemand bepaalde regels vastlegt… maar jah das mijn mening (alhoewel ik de Human Interface guidelins een goed idee vind … soms wel wat dubbelzinnig/abstract)