Xcode: information om 'NSTableView'

Tråden skapades och har fått 1 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • International user
  • 2004-10-16 12:04

Xcode > AppleScript Studio
Jag har skrivit ett program som använder 'NSTableView' för att presentera data. Programmet fungerar, men jag får inte grepp om alla "Event handlers" som är kopplade till 'NSTableView'. Apples egen dokumetation förklarar inte detta i detalj. Jag har "klippt och klistrat" vissa kodavsnitt från andra projekt, så det är därför det fungerar. Så nu undrar jag om någon har länktips för detta, eller ännu bättre: Skriva en lååång utläggning på svenska om detta...:)

  • Oregistrerad
  • 2004-10-16 23:32

Jag är inte riktigt säker på hur du menar men jag ska göra ett försök att hjälp dig. Vi börjar med lite grunder.

Delegate

En delegat är ett objekt som är utsett till att hantera händelser som inträffar. En händelse för NSTableView är t.ex. att en rad har blivit markerad eller att en cell skall till och bli utritad.

Vilken objekt som skall agera som delegat sätts med setDelegate om man inte vill använda sig av Interface Builder, mer om den senare.

DataSource

En data source är det objekt som är ansvarig för att förse NSTableView med den information som skall visas i tabellen. NSTableView begär data genom att göra anrop till olika metoder. För att NSTableView skall få den data som den begär krävs det då att det objekt som är data source har ett visst antal specifika metoder. Vilka metoder det är anges i NSTableDataSource. Man säger även att NSTableView kommunicerar vi protokollet NSTableDataSource. Men protokollet är bara ett antal metoder som NSTableView anropar i sitt data source objekt med.

Ett exempel på en sådan metod är numberOfRowsInTableView: som skall retunera antalet rader som NSTableView objektet består utav.

DataSource objektet skall alltså innehålla de eller en del av de metoder som finns i NSTableDataSource protokollet för att serva NSTableView med data.

Action

När ett objekt t.ex. NSTableView blir aktiverat och hamnar i fokus generas en action. Denna action kan kopplas till en metod i ett annat objekt.

Kopplingar med hjälp av Interface Builder

Nu kommer den luriga biten, att försöka förklara hur man gör de nödvändiga kopplingarna i Interface Builder.

Låt oss anta att vi har projekt vars GUI består utav ett NSWindow som innehåller en NSTableView. Det finns även en kontrollerklass som heter Controller för ovanlighetens skull. Controller ärver från NSObject. Hur man skapar en kontroller finns med i nästan alla exempel.

Nu vill jag att min Controller skall agera DataSource, Delegate och Action mottagare för min NSTableView.

För att jag skall kunna utföra detta måste jag ha följande fönster synliga i IB, NSWindow fönstret med NSTableView, Nib viewer med Instances markerat och Info-fönstret (under Tools show info).

Följande steg sker i Interface builder (IB).

DataSource

1. Ändra Nib Viewer till att visa Instances.
2. Dubbelklicka på NSTableView så att det står NSTableView info i info fönstret.
3. Ändra NSTableView info till att visa connections.
4. ctrl-klicka (håll inne) i NSTableView och dra en koppling till Controller i Nib Viewer.
5. Klicka på Outlets i NSTableView info.
6. Markera dataSource i NSTableView och klicka på Connect.

Nu är Controller data source för NSTableView och kommer att anropa Controller med metoderna i NSTableDataSource.

Delegate

För att gör Controller till delegat för min NSTableView så utför jag samma steg som för DataSource men väljer Delegate i steg 6. Observera att jag inte behöver göra kopplingen igen (4) eftersom den redan är gjord. Skulle jag velat ha en annan klass som delegat hanterare så hade jag varit tvungen att göra en koppling till den med.

Action

För att Controller skall kunna ta i mot en Action anrop måste det finnas en metod som blir anropad. I IB kan man skapa en sådan metod genom att :

1. Dubbelklicka på Controller i Nib Viewer under Instances eller markera Controller under Classes.
2. Ändra info fönstret som nu heter Controller Class Info till att visa Attributes.
3. Välj Actions och klicka på add. Skriv ett passande namn för metoden tryck enter.
4. Dubbelklicka på NSTableView så att det står NSTableView info i info fönstret.
5. Ändra NSTableView info till att visa connections.
6. ctrl-klicka och i NSTableView och dra en koppling till Controller i Nib Viewer
7. Klicka på Target/Action i NSTableView info.
8. Metoden som vi skapade tidigare skall nu vara listad här. Markera den och tryck connect.

Nu är Controller kopplat som mottagare för den Action som generas när NSTableView blir i fokus.

Det finns säkert en del fel och inkorrekta benämningar på termer och fönster men det får du försöka stå ut med. Hoppas att det här gav dig lite ledtrådar eller hjälp jag börjar bli lite seg i skallen nu så det här får räcka så länge.

URL till NSTableView

1
Bevaka tråden