iosuitableviewdelegatesxcode-storyboardsectionheader

UITableView section header clickable Delegate not Call


I am new to ios development. I am create app in Storyboard, Initially UItableviewController with one prototype cells, with button and labels. The button has IBAction method in it UItableViewCell Class, the class has Delegate to UItableviewController,the delegate method does not called. But the Images in section view is change. The i post my full code here.

Download whole project from Link

ContactHeaderViewCell.h

@protocol SectionClick;
@protocol SectionClick <NSObject>
@optional
- (void) TickCheckbox : (NSInteger) section;
- (void) UnTickCheckbox : (NSInteger) section;
@end
@interface ContactHeaderViewCell : UITableViewCell
{
id<SectionClick> HeaderDelegate;
}

@property (strong, nonatomic) IBOutlet UILabel *lblName;
@property (strong, nonatomic) IBOutlet UIButton *btnCheckBox;
@property (strong, nonatomic) IBOutlet UIButton *btnArrow;
- (IBAction)btnCheckBox_click:(id)sender;
- (IBAction)btnArrow_Click:(id)sender;


@property (nonatomic, strong) id<SectionClick> HeaderDelegate;
@property (nonatomic) NSInteger section;
- (void) setDelegate:(id)delegate;

@end'

ContactHeaderViewCell.m

@implementation ContactHeaderViewCell

@synthesize HeaderDelegate,section;
 - (void) setDelegate:(id)delegate
{
self.HeaderDelegate = delegate;
}
- (void)awakeFromNib {
// Initialization code
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];

// Configure the view for the selected state
}

- (IBAction)btnCheckBox_click:(id)sender {
self.btnCheckBox.selected = !self.btnCheckBox.selected;

if (self.btnCheckBox.selected)
{
    if ([self.HeaderDelegate respondsToSelector:@selector(UnTickCheckbox:)])
    {
        [self.HeaderDelegate UnTickCheckbox:self.section];
    }
} else
{
    if ([self.HeaderDelegate respondsToSelector:@selector(TickCheckbox:)])
    {
        [self.HeaderDelegate TickCheckbox:self.section];
    }
}
}

ContactTableViewController.m

#import "ContactDetail.h"
#import "ContactHeaderViewCell.h"

@interface ContactTableViewController : UITableViewController<SectionClick>
@property(nonatomic) ContactDetail *contacts;
@property(nonatomic) NSMutableArray *ContactList;
@end

ContactTableViewController.m

#import "ContactTableViewController.h"
#import <AddressBook/AddressBook.h>
#import "ContactHeaderViewCell.h"
#import "UserDetailViewCell.h"

@interface ContactTableViewController ()

@end

@implementation ContactTableViewController

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
    }
    return self;
}
- (void)viewDidLoad {
    [self ArrayContactFunc];
    [super viewDidLoad];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return [self.ContactList count];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    self.contacts =(self.ContactList)[section];
    return (self.contacts.Isopen) ? [self.contacts.mobileNumbers count] : 0;
}

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    static NSString *HeaderIdentifier = @"HeaderCell";
    self.contacts = (self.ContactList)[section];
    ContactHeaderViewCell *HeaderView = (ContactHeaderViewCell *)[self.tableView dequeueReusableCellWithIdentifier:HeaderIdentifier];
    if (HeaderView == nil){
        [NSException raise:@"headerView == nil.." format:@"No cells with matching CellIdentifier loaded from your storyboard"];
            }
    HeaderView.lblName.text = self.contacts.fullName;
        if(self.contacts.IsChecked)
        {
            [HeaderView.btnCheckBox setImage:[UIImage imageNamed:@"Unchecked.png"] forState:UIControlStateSelected];
        }
        else
        {
            [HeaderView.btnCheckBox setImage:[UIImage imageNamed:@"Checked.png"] forState:UIControlStateSelected];
        }
    return HeaderView;
}

- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    self.contacts = (self.ContactList)[indexPath.section];
    static NSString *DetailCellIdentifier = @"DetailCell";
    UserDetailViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:DetailCellIdentifier];
    if(!cell)
    {
         [NSException raise:@"headerView == nil.." format:@"No cells with matching CellIdentifier loaded from your storyboard"];
    }

    cell.lblDetail.text = (self.contacts.mobileNumbers)[indexPath.row];
    return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 60.0;
}
-(void)UnTickCheckbox:(NSInteger)section
{
//    self.contacts = (self.ContactList)[section];
//    self.contacts.IsChecked = NO;
//    [self.tableView reloadData];
}

-(void)TickCheckbox:(NSInteger)section
{
//    self.contacts = (self.ContactList)[section];
//    self.contacts.IsChecked = YES;
//    [self.tableView reloadData];
}

Thank in advance.


Solution

  • You must add this line [HeaderView setHeaderDelegate:self]; in method: -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;