uitableviewAan de slag met uitableview


Opmerkingen

Deze sectie geeft een overzicht van wat uitableview is en waarom een ontwikkelaar het misschien wil gebruiken.

Het moet ook alle grote onderwerpen in uitableview vermelden en een link naar de gerelateerde onderwerpen bevatten. Omdat de documentatie voor uitableview nieuw is, moet u mogelijk eerste versies van die gerelateerde onderwerpen maken.

Methoden voor delegeren en gegevensbronnen:

Elke tabelweergave moet een gemachtigde en een gegevensbron hebben.

Methoden delegeren

Geen van de gedelegeerde methoden is feitelijk vereist, maar u moet tableView implementeren: didSelectRowAtIndexPath: om aanrakingen op een tabelcel af te handelen:

En andere methoden zijn ...

// Display customization

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath;

// Variable height support

// If these methods are implemented, the above -tableView:heightForXXX calls will be deferred until views are ready to be displayed, so more expensive logic can be placed there.

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;

// Section header & footer information. Views are preferred over title should you decide to provide both

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;   // custom view for header. will be adjusted to default or specified header height
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section;   // custom view for footer. will be adjusted to default or specified footer height

// Accessories (disclosures). 

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath;

// Selection

// Called before the user changes the selection. Return a new indexPath, or nil, to change the proposed selection.
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath;
// Called after the user changes the selection.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;


// Editing

// Allows customization of the editingStyle for a particular cell located at 'indexPath'. If not implemented, all editable cells will have UITableViewCellEditingStyleDelete set for them when the table has editing property set to YES.
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath;

// Controls whether the background is indented while editing.  If not implemented, the default is YES.  This is unrelated to the indentation level below.  This method only applies to grouped style table views.
- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath;

             

// Indentation

- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath; // return 'depth' of row for hierarchies
 

Gegevensbron Vereiste methoden:

De volgende methoden zijn vereist voor de gegevensbron: tableView: numberOfRowsInSection: en tableView: cellForRowAtIndexPath :. Als uw tabel een gegroepeerde tabel is, moet u ook numberOfSectionsInTableView: implementeren.

Vereiste methoden : -

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;

// Row display.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
 

Optionele methoden : -

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;              // Default is 1 if not implemented

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;    // fixed font style. use custom view (UILabel) if you want something different
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section;

// Editing

// Individual rows can opt out of having the -editing property set for them. If not implemented, all rows are assumed to be editable.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath;

// Moving/reordering

// Allows the reorder accessory view to optionally be shown for a particular row. By default, the reorder control will be shown only if the datasource implements -tableView:moveRowAtIndexPath:toIndexPath:
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath;

// Index

- (NSArray<NSString *> *)sectionIndexTitlesForTableView:(UITableView *)tableView;                                                    // return list of section titles to display in section index view (e.g. "ABCD...Z#")
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index;  // tell table which section corresponds to section title/index (e.g. "B",1))

// Data manipulation - insert and delete support

// After a row has the minus or plus button invoked (based on the UITableViewCellEditingStyle for the cell), the dataSource must commit the change
// Not called for edit actions using UITableViewRowAction - the action's handler will be invoked instead
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath;

// Data manipulation - reorder / moving support

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath;
 

Anatomie van een tabelcel

De standaard UITableViewCell heeft verschillende standaard gegevensweergaven en subweergaven.

  • cell.textLabel - het UILabel voor de cel
  • cell.detailTextLabel - een kleiner UILabel dat onder het tekstlabel verschijnt
  • cell.imageView - een UIImageView aan de linkerkant van de cel

Het optionele accessoireoverzicht kan een van de volgende pictogrammen bevatten. Het standaard accessoireType is UITableViewCellAccessoryNone .

UITableBekijk in detail

Wat is UITableView?

UITableView is een meest gebruikt gebruikersinterfaceobject dat gegevens presenteert in een schuifbare lijst van meerdere rijen in een enkele kolom die ook in secties kan worden verdeeld. Het staat alleen verticaal scrollen toe en is een subklasse van UIScrollView .

Waarom gebruiken we UITableView?

We kunnen UITableView om een lijst met opties te selecteren die kunnen worden geselecteerd, om door hiërarchisch gestructureerde gegevens te navigeren, een geïndexeerde lijst met items te presenteren, om detailinformatie en bedieningselementen weer te geven in visueel verschillende groepen die gebruik maken van secties .

We kunnen het gebruik van UITableView in onze contacten, mailinglijsten enz. Het wordt niet alleen gebruikt om tekstgegevens te presenteren, maar ook afbeeldingen en teksten kunnen worden vermeld, zoals in de YouTube-app.

Gedetailleerde instructies voor het instellen of installeren van UITableView met behulp van Story Board.

  1. Maak een eenvoudig project voor de Single View-toepassing.
  2. Selecteer in de objectbibliotheek het object “Tabelweergave” en sleep het naar de weergave van uw weergavecontroller. Als u het project eenvoudig uitvoert, ziet u een lege pagina met lijnen.
  3. Als u nu gewoon een schuifbare weergave met inhoud wilt, sleept u een UIView naar de UITableView , past u de grootte aan en sleept u de rest van de UIElements naar die weergave volgens de vereisten. Maar als u een lijst met een vergelijkbaar formaat wilt presenteren, gebruiken we UITableViewCell .
  4. De klasse UITableViewCell definieert de kenmerken en het gedrag van de cellen die worden weergegeven in UITableView-objecten. Deze klasse bevat eigenschappen en methoden voor het instellen en beheren van celinhoud en achtergrond (inclusief tekst, afbeeldingen en aangepaste weergaven), het beheren van de celselectie en markeringsstatus, het beheren van accessoire-weergaven en het initiëren van de bewerking van de celinhoud.
  5. Het beste deel van het gebruik van UITableViewCell is herbruikbaarheid. Het doel van dequeueReusableCellWithIdentifier is om minder geheugen te gebruiken. Als u bijvoorbeeld een lijst met 1000 vermeldingen hebt en slechts 10 vermeldingen tegelijk zichtbaar zijn, worden alleen de zichtbare cellen in het geheugen toegewezen, de rest wordt opnieuw gebruikt als wanneer de gebruiker door de lijst bladert. Het enige wat u hoeft te doen is een UITableViewCell slepen en neerzetten op tableView. Klik vervolgens op cel-> Ga naar attribuutinspecteur-> Stel tabelweergavestijl in op aangepast en id op alles wat u maar wilt zeggen myCell.
  6. Nu moeten we voldoen aan de gegevensbron zodat dat object gegevens aan een ander object geeft. Het UITableViewDataSource protocol heeft bijvoorbeeld methoden zoals cellForRowAtIndexPath en numberOfRowsInSection die bepalen wat er in de tabel moet worden weergegeven. Terwijl het delegate type object reageert op acties die een ander object uitvoert. Het UITableViewDelegate protocol heeft bijvoorbeeld methoden zoals didSelectRowAtIndexPath voor het uitvoeren van acties bij een gebruiker die een bepaalde rij in een tabel selecteert. 7.Wanneer u zich conformeert aan de gegevensbron, moet u de vereiste methode implementeren, dwz
 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
        // Here you need to give the total number of items you want to list. For example if you want list of 2 numbers, then:

           return 2; 

 }
 

en

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

//Here you need to dequeue the reusable cell which we discussed in point 5. Then you can modify your cell here according to you and customize it here as per your requirement. Here the call comes for numberOfRows number of times. 

static NSString *cellIdentifier = @"cellID";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:
cellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc]initWithStyle:
    UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
} 
if(indexPath.row){
    [cell.textLabel setText:"1"];
}else{
    [cell.textLabel setText:"2"];
}

return cell;
}
 
  1. Ook over NSIndexPath: - De klasse NSIndexPath vertegenwoordigt het pad naar een specifiek knooppunt in een structuur met geneste arraycollecties. Dit pad staat bekend als een indexpad. De objecten zijn altijd van lengte 2. Ze worden bijvoorbeeld gebruikt om een tabelweergavecel te indexeren. De eerste index in een NSIndexPath-object wordt de sectie genoemd, de tweede is de rij. Een indexpadobject met sectie 0 en rij 0 geeft de eerste rij in de eerste sectie aan. Gebruik [NSIndexPath indexPathForRow:inSection:] om snel een [NSIndexPath indexPathForRow:inSection:] te maken.