kiran kumar
kiran kumar

Reputation: 1359

delegate and datasource methods for UITableView

Can anyone list delegate methods and data source methods for UITableView?

Are delegates and data sources methods are same for UITableView?

Upvotes: 15

Views: 85507

Answers (12)

Pravin Parmar
Pravin Parmar

Reputation: 159

//Delegate & DataSource method Deferent.

//Swift 4.1 

   UITableViewDataSource: // below two methods required

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

//Optional

func numberOfSections(in tableView: UITableView) -> Int

func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String?

func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String?

//row Edit

func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool

func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool

// Index

func sectionIndexTitles(for tableView: UITableView) -> [String]?


func tableView(_ tableView: UITableView, sectionForSectionIndexTitle title: String, at index: Int) -> Int

// Row Insert or Delete 

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath)

func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath)

//UITableViewDelegate
//Row, header, Footer  height


 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat

// Row Selected


func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)

func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath)

Upvotes: 1

Heeba Khan
Heeba Khan

Reputation: 102

Let me try to explain you in a simple way, the method I used to understand. Delegates simply keeps track of stuff that is done or the actions performed on the cell. While DataSource provides you with the functions that define how the table will look like.

With that being said functions for delegates are:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{}
  • (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath{}

and DataSource

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{}

and

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

Upvotes: 0

Maulik Salvi
Maulik Salvi

Reputation: 279

#pragma mark Tableview Delegate Method

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;    //count of section
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = (UITableViewCell *) [tableView dequeueReusableCellWithIdentifier:@"TableviewCell"];

    UILabel *lbldescription = (UILabel *)[cell viewWithTag:1];

    cell.selectionStyle=UITableViewCellSelectionStyleNone;
    cell.backgroundColor=[UIColor clearColor];
    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
{
}

-(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return UITableViewAutomaticDimension;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    return UITableViewAutomaticDimension;
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {

    UITableViewCell *cell = (UITableViewCell *) [tableView dequeueReusableCellWithIdentifier:@"TableviewCell_Header"];

    cell.selectionStyle=UITableViewCellSelectionStyleNone;
    cell.backgroundColor=[UIColor whiteColor];

    return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 100;
}

Upvotes: -3

Debasish Bose
Debasish Bose

Reputation: 37

Data Source Method:

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{}

and

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

Delegate method:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{}



- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath{}

This are the main methods which we use to make table view work. Apart from this there are lots of method. Read UITableView Delegate and Datasource documentation to know more methods and its working.

Upvotes: 3

bLacK hoLE
bLacK hoLE

Reputation: 801

Which ever method returns a value, that is a dataSource method and other remaining method is delegate method

Given Below

delegate methods

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

Data Source

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

Upvotes: 1

Programming Learner
Programming Learner

Reputation: 4411

Go to the link, it will describe about all the basics of UITableView.

Primary Methods of UITableView are:

– tableView:cellForRowAtIndexPath: // required method

– tableView:numberOfRowsInSection: // required method

– numberOfSectionsInTableView:

– sectionIndexTitlesForTableView:

– tableView:sectionForSectionIndexTitle:atIndex:

– tableView:titleForHeaderInSection:

– tableView:titleForFooterInSection:

The required one are those whom you must have to include in the code. Don't forget to link the Table delegate and datasource with File Owner.

Upvotes: 1

Saurabh
Saurabh

Reputation: 22873

   tableView:accessoryButtonTappedForRowWithIndexPath:   
   tableView:didDeselectRowAtIndexPath:   
   tableView:didEndEditingRowAtIndexPath:   
   tableView:didSelectRowAtIndexPath:   
   tableView:editingStyleForRowAtIndexPath:   
   tableView:heightForFooterInSection:   
   tableView:heightForHeaderInSection:   
   tableView:heightForRowAtIndexPath:  
   tableView:indentationLevelForRowAtIndexPath:   
   tableView:shouldIndentWhileEditingRowAtIndexPath:   
   tableView:targetIndexPathForMoveFromRowAtIndexPath:toProposedIndexPath:   
   tableView:titleForDeleteConfirmationButtonForRowAtIndexPath:   
   tableView:viewForFooterInSection:   
   tableView:viewForHeaderInSection:   
   tableView:willBeginEditingRowAtIndexPath:   
   tableView:willDeselectRowAtIndexPath:   
   tableView:willDisplayCell:forRowAtIndexPath:   
   tableView:willSelectRowAtIndexPath:  

have a look

Upvotes: 6

raw3d
raw3d

Reputation: 3515

I have prepared a sheet of all methods in delegate and datasource.

UITableViewDelegate methods

Upvotes: 80

Johan
Johan

Reputation: 1951

I dont understand the last part of your question.

There is a great place provided by Apple called 'iOS Dev Center' that will answer almost all questions you can have about developing for iOS devices. This information is also available through Xcode.

UITableDataSource

UITableViewDelegate

Upvotes: 3

visakh7
visakh7

Reputation: 26390

//_______________________________________________________________________________________________________________
// this represents the display and behaviour of the cells.

@protocol UITableViewDelegate<NSObject, UIScrollViewDelegate>

@optional

// Display customization

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

// Variable height support

- (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). 

- (UITableViewCellAccessoryType)tableView:(UITableView *)tableView accessoryTypeForRowWithIndexPath:(NSIndexPath *)indexPath __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_NA,__MAC_NA,__IPHONE_2_0,__IPHONE_3_0);
- (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;
- (NSIndexPath *)tableView:(UITableView *)tableView willDeselectRowAtIndexPath:(NSIndexPath *)indexPath __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);
// Called after the user changes the selection.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);

// 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;
- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);

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

// The willBegin/didEnd methods are called whenever the 'editing' property is automatically changed by the table (allowing insert/delete/move). This is done by a swipe activating a single row
- (void)tableView:(UITableView*)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath;
- (void)tableView:(UITableView*)tableView didEndEditingRowAtIndexPath:(NSIndexPath *)indexPath;

// Moving/reordering

// Allows customization of the target row for a particular row as it is being moved/reordered
- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath;               

// Indentation

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

@end
//_______________________________________________________________________________________________________________
    // this protocol represents the data model object. as such, it supplies no information about appearance (including the cells)

@protocol UITableViewDataSource<NSObject>

@required

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

// Row display. Implementers should *always* try to reuse cells by setting each cell's reuseIdentifier and querying for available reusable cells with dequeueReusableCellWithIdentifier:
// Cell gets various attributes set automatically based on table (separators) and data source (accessory views, editing controls)

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

@optional

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

@end

Upvotes: 40

Krishnabhadra
Krishnabhadra

Reputation: 34265

List them?? No they are not same.. Look at documentation.. http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewDelegate_Protocol/Reference/Reference.html

http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewDataSource_Protocol/Reference/Reference.html

Datasource methods are used to generate tableView cells,header and footer before they are displaying..Delegate methods provide information about these cells, header and footer along with other user action handlers like cell selection and edit..

Upvotes: 6

Related Questions