2013-04-15 27 views
7

Tôi có một số UITableView có nhiều sections và mỗi phần chỉ có 1 hàng.Cách lấy tiêu đề của chế độ xem tiêu đề của phần khi chọn một ô

Điều tôi muốn làm là khi tôi nhấp vào một ô cụ thể, tiêu đề của tiêu đề tương ứng với ô sẽ được thay đổi.

tôi đã thiết lập các tiêu đề mục nhỏ dùng -tableView:viewForHeaderInSection:

Làm thế nào tôi có thể nhận được danh hiệu đầu hàng bên trong phương pháp -tableView:didSelectRowAtIndexPath:?

+0

Có một số cách để nhận tiêu đề phần đó. Nếu bạn đang sử dụng một nguồn dữ liệu (NSArray nhiều khả năng nhất) cho các tiêu đề phần, bạn thực sự chỉ cần một dòng mã để có được nó. Đừng nhảy vào câu trả lời đầu tiên bạn đọc. Đọc qua tất cả và chắc chắn rằng bạn hiểu những gì từng người đang làm. –

Trả lời

4

tôi sẽ đề nghị thực hiện cả hai tableView:titleForHeaderInSection:tableView:viewForHeaderInSection: (nếu cả hai được thực hiện sau đó iOS thích viewForHeaderInSection:). Sau đó có thực hiện lại tableView:viewForHeaderInSection: tạo quan điểm của mình với nhãn và cư nó với kết quả của tableView:titleForHeaderInSection::

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
    UIView *yourHeaderView; 
    UILabel *someLabel; 

    // set up the view + label 

    // if self doesn't implement UITableViewDelegate, you can use tableView.delegate 
    someLabel.text = [self tableView:tableView titleForHeaderInSection:section]; 

    return yourHeaderView; 
} 

Bây giờ khi bạn đang đối phó với một cú chạm liên tiếp, nó rất dễ dàng để có được những danh hiệu tương ứng:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSString *titleForHeader = [self tableView:tableView titleForHeaderInSection:indexPath.section]; 
} 
+0

Giải quyết vấn đề của tôi Cảm ơn! – Hassy

-1

Bạn có thể lấy chỉ số phần bằng cách sử dụng:

indexpath.section 

Với chỉ số phần, bạn chỉ có thể lặp lại những gì bạn có trong -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section để có được danh hiệu phần.

+0

Có một phương pháp thích hợp cho những gì được hỏi. – Desdenova

+0

@Desdenova - đọc câu hỏi. Anh ấy hỏi làm thế nào để có được tiêu đề của tiêu đề phần hiện tại trong didSelectRow ... –

0

Chỉ cần sử dụng nguồn dữ liệu cho tiêu đề phần. Vì vậy, bất cứ điều gì NSArray bạn có giữ các giá trị chuỗi cho

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

chỉ sử dụng trong didSelectRowAtIndexPath:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
... 
NSString *titleForHeader = [myHeaderTitleArray objectAtIndex:indexPath.section]; 
} 
+0

Có một phương pháp thích hợp cho những gì được yêu cầu. – Desdenova

+1

@Desdenova - đọc câu hỏi.Anh ấy hỏi làm thế nào để có được tiêu đề của tiêu đề phần hiện tại trong didSelectRow ... –

+0

Vì vậy? Nhận giao diện tiêu đề, nhận nhãn văn bản và nó nằm trong đó. – Desdenova

6

Bạn có thể có được cái nhìn tiêu đề cho Index chọn như:

UIView *headerView=[deviceTable headerViewForSection:indexPath.section]; 

Sau đó, nhận con từ headerView bằng cách lặp qua.like

for(UIView *view in headerView.subviews) 
{ 
    if ([v isKindOfClass:[UILabel class]]) 
     { 
      UILabel *label=(UILabel *)v; 
      NSString *text=label.text; 
     } 
} 

Edit: Như Desdenova gợi ý:

UITableViewHeaderFooterView *headerView=[deviceTable headerViewForSection:indexPath.section]; 
    NSString *title=headerView.textLabel.text; 
+0

Không cần lặp lại. 'headerViewForSection' trả về' UITableViewHeaderFooterView'. Và nó có thuộc tính 'textLabel'. – Desdenova

+0

Anh ta không yêu cầu xem. Ông yêu cầu tiêu đề trong didSelectRowAtIndexPath. –

+0

Nếu tầm nhìn của tôi là chế độ xem tùy chỉnh thì làm cách nào tôi có thể truy cập văn bản nhãn của mình – iDia

3

Swift giải pháp:

let sectionHeaderView = table.headerViewForSection(indexPath.section) 
let sectionTitle = sectionHeaderView?.textLabel?.text 
0

Swift 4:

let indexPath = IndexPath.init(row: 0, section: 0) // put here your row or section number.. 
let myHeaderView = tableView.headerView(forSection:indexPath.section) 
let title = myHeaderView?.textLabel?.text