2011-12-06 28 views
25

Tôi có chế độ xem bảng với một vài mục (tất cả văn bản). Khi người dùng nhấp vào hàng tôi muốn văn bản đó trong ô đó sẽ được thêm vào một mảng.UITableView DidSelectRowAtIndexPath?

Làm cách nào để lấy văn bản ra khỏi ô?

Tôi đã có:

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

} 

Có một dòng đơn giản, tôi có thể sử dụng để lấy các văn bản ra khỏi tế bào mà người dùng nhấp?

Trả lời

94

Sử dụng UITableView's cellForRowAtIndexPath:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    NSString *cellText = cell.textLabel.text; 
} 
+0

+1 cho câu trả lời tuyệt vời – Rushabh

+0

Hoạt động như một nét duyên dáng vẫn còn trong iOS7! –

+0

Không. Rất nhiều ví dụ luôn luôn dequeue và xây dựng một tế bào mới trong cellForRowAtIndexPath. Vì vậy, nếu bạn gọi nó, bạn sẽ không nhận được cùng một tế bào được trả lại khi khung được gọi là nó để hiển thị các tế bào. – user2451227

3

đoán đầu tiên của tôi sẽ nhận được chỉ mục, [indexPath hàng]; sau đó tìm nạp dữ liệu từ nguồn dữ liệu của bạn (một mảng hoặc dữ liệu cốt lõi) thay vì trực tiếp từ chính bảng đó.

6

Đó là nghịch đảo của những gì bạn đã làm trong cellForRowAtIndexPath.

[myArray addObject: [datasource objectAtIndex:indexPath.row]]; 
4

Nói chung, bạn có thể tìm thấy hầu hết các câu trả lời cho câu hỏi như thế này trong các tài liệu hướng dẫn của Apple. Trong trường hợp này, hãy xem dưới UITableView Class Reference và bạn sẽ thấy tiêu đề phần: Truy cập các ô và phần. Đây cung cấp cho bạn những phương pháp sau đây:.

– cellForRowAtIndexPath: 

Bây giờ sử dụng để truy cập vào các tế bào, và sau đó sử dụng nhận được văn bản từ tế bào (nếu bạn không chắc chắn như thế nào, hãy xem dưới UITableViewCell Class Reference

Tất cả cùng nhau , phương pháp của bạn có thể trông giống như thế này:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    NSString *cellText = cell.textLabel.text; 
    [myArray addObject:cellText]; 
} 
1

Swift Version:

let cell: UITableViewCell = tableView.cellForRowAtIndexPath(indexPath)! 
let cellText: String = cell.textLabel.text 
Các vấn đề liên quan