UITableView部分标题可单击代表未调用

时间:2015-03-13 14:32:21

标签: ios uitableview delegates xcode-storyboard sectionheader

我是ios开发的新手。我在Storyboard中创建应用程序,最初是 UItableviewController,带有一个原型单元,带有按钮和标签。 按钮 UItableViewCell 类中有 IBAction 方法,该类有委托 UItableviewController ,委托方法未调用。但截面视图中的图像是更改。我在这里发布我的完整代码。

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];
}

提前感谢。

1 个答案:

答案 0 :(得分:0)

您必须添加此行 [HeaderView setHeaderDelegate:self]; 在方法中: - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;