2013-10-08 18 views
5

Tôi thêm một tableview vào một bộ điều khiển xem sau đó cố gắng thay đổi tiêu đề phần tiêu đề của nó trong IOS 6.0.Tiêu đề UITableViewForHeaderInSection không được gọi là

tôi sẽ được thay đổi chuỗi tiêu đề mỗi lần một chức năng cụ thể được gọi là như vậy Tôi không muốn để đối phó với (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

Tôi cố gắng để sử dụng (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section nhưng khi tôi đặt một breakpoint tôi thấy rằng nó không được gọi.

tập tin in.h tôi thêm UITableViewDelegate, UITableViewDataSource

in.m

-(void)viewDidAppear:(BOOL)animated 
{ 
    //tableview init 
    self.meetingList=[[UITableView alloc] initWithFrame:CGRectMake(10, self.ckCal.frame.origin.y + self.ckCal.bounds.size.height+20, 384, 450) style:UITableViewStylePlain]; 
    [self.meetingList setSeparatorStyle:UITableViewCellSeparatorStyleNone]; 
    self.meetingList.delegate=self; 

    //populate mutablearray for tableview here 
    [self eventsInThisMonth:[NSDate date]]; 

    [self.view addSubview:self.meetingList]; 
} 
-(void)eventsInThisMonth:(NSDate *)date 
{ 

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"MMMM , yyyy"]; 
    //self.firstSectionHeader=nil; 
    self.firstSectionHeader= [NSString stringWithFormat:@"Events in %@", [dateFormatter stringFromDate:date]]; 
    NSLog(@" self.firstSectionHeader %@ ",self.firstSectionHeader); 

} 
#pragma Tableview 
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return [self.eventHeaders count] + 1; 

} 

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 
{ 
    return 35; 
} 
//set header section labels 
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 

    UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 35)] ; 
    [headerView setBackgroundColor:[UIColor colorWithRed:106/256.0 green:106/256.0 blue:106/256.0 alpha:1.0]]; 
    UILabel *subjectLabel = [[UILabel alloc] initWithFrame:CGRectMake(92, 10, tableView.bounds.size.width, 20)]; 
    subjectLabel.textColor = [UIColor whiteColor]; 
    subjectLabel.font = [UIFont fontWithName:@"Gill Sans" size:20]; 
    subjectLabel.backgroundColor = [UIColor clearColor]; 
    subjectLabel.text=self.firstSectionHeader; 
    NSLog(@"subjectLabel.text %@",subjectLabel.text); 

    if (section==0) { 

     //[headerView addSubview:subjectLabel]; 
     return headerView; 
    } 
    else 
     return nil; 


} 

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 
{ 
    if (section==0) { 
     NSLog(@"self.firstSectionHeader in titleForHeaderInSection %@",self.firstSectionHeader); 
     return self.firstSectionHeader; 
    } 
    else 
     return nil; 
} 

Tôi đang làm gì sai?

+0

Nhìn vào mã của bạn ... Tại sao bạn muốn sử dụng cả hai, viewForHeaderInSection và titleForHeaderInSection? Bạn đang thiết lập tiêu đề trong viewForHeaderInSection anyway ... – Odrakir

Trả lời

15

Tôi nghĩ rằng đó có thể là do bạn chỉ được sử dụng một trong hai: viewForHeaderInSection hoặc titleForHeaderInSection.

+0

Điều gì sẽ xảy ra nếu tôi muốn thay đổi màu nền của phần tiêu đề. – user2858870

+0

Bạn sẽ chỉ phải tạo một tiêu đề mới trong viewForHeaderInSection. – Odrakir

+1

Bạn có thể thực hiện cả hai. Trong viewForHeaderInSection, tôi giả sử bạn có một UILabel (giữ bất kỳ NSString nào bạn đang sử dụng cho tiêu đề). Chỉ cần đặt chuỗi đó bằng cách gọi titleForHeaderInSection: Tốt nhất của cả hai thế giới. – Doc

1

Bạn đang thiếu self.meetingList.datasource = self;

Hãy nhớ rằng viewController của bạn phải implemente các UITableViewDelegate và UITableViewDataSource.

YourClass : UITableView <UITableViewDelegate, UITableViewDataSource> 
+0

Câu trả lời của bạn là một nửa nhờ chính xác, tôi đã cố gắng để upvote câu trả lời của bạn nhưng tôi không thể upvote mà không có đủ danh tiếng. – user2858870

+0

Tôi thấy quá tệ :( – artud2000

0

Bạn phải làm

self.meetingList.dataSource=self; 

trong viewDidAppear.

1

Re: Tôi đang làm gì sai.

Tôi không chắc chắn liệu bạn có đang đặt nguồn dữ liệu và ủy quyền trên bộ điều khiển xem của bạn trong Bộ dựng giao diện hay không. Nhưng tôi tin rằng có một lỗi logic tác động đến kết quả mong đợi.

tiêu đềForHeaderInSection: Yêu cầu nguồn dữ liệu cho tiêu đề của tiêu đề của phần được chỉ định của chế độ xem bảng.

Trong khi đó

tableView: viewForHeaderInSection: hỏi đại biểu cho một đối tượng xem để hiển thị trong tiêu đề của phần được chỉ định của xem bảng.

Phương thức thứ hai là ghi đè hành vi được xác định cho tiêu đềForHeaderInSection. Nghĩ theo cách này; bạn có một không gian tiêu đề có thể giữ một tiêu đề HOẶC một chế độ xem tùy chỉnh mà bạn tạo để thay thế mặc định (tiêu đề). Bạn đang yêu cầu trình biên dịch sử dụng chế độ xem tùy chỉnh bằng cách triển khai phương thức thứ hai. Để khắc phục nhận xét này ra hoặc loại bỏ tableView: viewForHeaderInSection: phương thức hoặc thay đổi logic của bạn để bạn cập nhật tiêu đề trong chế độ xem tùy chỉnh mà bạn chuyển vào phương thức. Tại thời điểm đó titleForHeaderInSection nên được nhấn một cách chính xác.

Vui lòng xem xét chấp nhận câu trả lời này nếu thành công trong việc giải quyết câu hỏi ban đầu của bạn.

0

Tôi biết chủ đề này là một ít tuổi, nhưng chắc chắn rằng bạn cũng có:

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{

Các tableview sẽ cần phải biết chiều cao trước khi nó có thể lấy quan điểm.

0

Ngoài ra, bạn cần phải thực hiện cả hai KHÔNG

(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 

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

Nếu bạn sẽ thực hiện ít nhất một trong phương pháp đầu tiên, sau đó

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

sẽ không được gọi .

Các vấn đề liên quan