Looking for uitableview Answers? Try Ask4KnowledgeBase
Looking for uitableview Keywords? Try Ask4Keywords

uitableviewKomma igång med utableview


Anmärkningar

Det här avsnittet ger en översikt över vad utableview är och varför en utvecklare kanske vill använda den.

Det bör också nämna alla stora ämnen inom utableview och länka till relaterade ämnen. Eftersom dokumentationen för utableview är ny kan du behöva skapa initialversioner av relaterade ämnen.

Delegerade och datakällmetoder:

Varje tabellvy måste ha en delegat och en datakälla.

Delegerade metoder

Ingen av delegatmetoderna krävs faktiskt, men du måste implementera tableView: didSelectRowAtIndexPath: för att hantera beröring på en tabellcell:

Och andra metoder är ...

// 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
 

Metod för datakälla krävs:

Följande metoder krävs från datakällan: tableView: numberOfRowsInSection: och tableView: cellForRowAtIndexPath :. Om ditt bord är en grupperad tabell måste du också implementera numberOfSectionsInTableView :.

Obligatoriska metoder : -

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

// Row display.

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

Valfria metoder : -

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

Anatomi av en tabellcell

Standard UITableViewCell har flera standarddatavyer och undervyer.

  • cell.textLabel - UIL-märket för cellen
  • cell.detailTextLabel - ett mindre UIL-märke som visas under textetiketten
  • cell.imageView - en UIImageView som cellens vänstra sida

Den valfria tillbehörsvyn kan innehålla en av följande ikoner. Standardtillbehörstypen är UITableViewCellAccessoryNone .

UITableView i detalj

Vad är UITableView?

UITableView är ett mest använda användargränssnittsobjekt som presenterar data i en rullbar lista över flera rader i en enda kolumn som också kan delas upp i sektioner. Det tillåter endast vertikal rullning och är en underklass för UIScrollView .

Varför använder vi UITableView?

Vi kan använda UITableView att presentera en lista med alternativ som kan väljas, för att navigera genom hierarkiskt strukturerade data , presentera en indexerad lista med objekt , för att visa detaljerad information och kontroller i visuellt distinkta grupperingar som använder avsnitt .

Vi kan se användningen av UITableView i våra kontakter, e-postlistor etc. Det används inte bara för att presentera textdata utan också bilder tillsammans med texter kan listas, till exempel i YouTube-appen.

Detaljerade instruktioner för att få UITableView konfigurerat eller installerat med Story Board.

  1. Skapa ett enkelt projekt för Single View-applikationen.
  2. I objektbiblioteket väljer du "Tabellvy" -objektet och drar det till vyn på din vynkontroller. Genom att bara köra projektet ser du en tom sida med rader.
  3. Om du helt enkelt vill ha en rullningsbar vy med innehåll, drar du en UIView till UITableView , justerar dess storlek och drar resten av UIElements till den vyn enligt krav. Men om du vill presentera en lista med liknande format använder vi UITableViewCell .
  4. UITableViewCell definierar attribut och beteende för cellerna som visas i UITableView-objekt. Denna klass innehåller egenskaper och metoder för att ställa in och hantera cellinnehåll och bakgrund (inklusive text, bilder och anpassade vyer), hantera cellval och markera tillstånd, hantera tillbehörsvyer och initiera redigeringen av cellinnehållet.
  5. Den bästa delen av att använda UITableViewCell är återanvändbarhet. Syftet med dequeueReusableCellWithIdentifier är att använda mindre minne. För t.ex. om du har en lista med 1000 poster och bara 10 poster är synliga åt gången, är det bara de synliga cellerna som tilldelas i minnet, resten återanvänds som när användaren rullar listan. Allt du behöver göra är att dra en UITableViewCell och släppa till tableView. Klicka sedan på cell-> Gå till attributinspektör-> Ställ in tabellView-stil till anpassad och identifierare till allt unikt du vill säga myCell.
  6. Nu måste vi anpassa oss till datakällan så att objektet ger data till ett annat objekt. Till exempel har UITableViewDataSource protokollet metoder som cellForRowAtIndexPath och numberOfRowsInSection dikterar vad som ska visas i tabellen. Medan delegerat typobjekt svarar på åtgärder som ett annat objekt vidtar. Till exempel har UITableViewDelegate protokollet metoder som didSelectRowAtIndexPath för att utföra åtgärder på en användare som väljer en viss rad i en tabell. 7.När du överensstämmer med datakällan måste du implementera den erforderliga metoden, dvs.
 - (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; 

 }
 

och

- (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. Även om NSIndexPath: - NSIndexPath-klassen representerar sökvägen till en specifik nod i ett träd med kapslade array-samlingar. Den här vägen är känd som en indexväg. Objekten har alltid längd 2. De används till exempel för att indexera en tabellvycell. Det första indexet i ett NSIndexPath-objekt kallas avsnittet, det andra är raden. Ett indexvägsobjekt med sektion 0 och rad 0 indikerar den första raden i det första avsnittet. Använd [NSIndexPath indexPathForRow:inSection:] att snabbt skapa en indexväg.