2011-01-06 41 views
15

Tôi muốn chọn nhiều hàng trong một UITableView giống như Apple không trong ứng dụng báo thức bản địa (xem hình alt textChọn nhiều hàng trong UITableView

Làm thế nào tôi có thể làm điều đó?

Tất cả các câu trả lời tôi thấy cho đến nay đã cũ (và nói "Không thể làm") hoặc tham khảo lựa chọn nhiều hàng trong ứng dụng Thư gốc.Phương pháp đó không phải là những gì tôi muốn bởi vì bạn phải nhập vào "chỉnh sửa" -mode đầu tiên. muốn có thể chọn các hàng ngay lập tức

Hy vọng ai đó có thể giúp đỡ.

Christian

Trả lời

24

Trong

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

làm

if([tableView cellForRowAtIndexPath:indexPath].accessoryType == UITableViewCellAccessoryCheckmark){ 
     [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryNone; 
    }else{ 
     [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark; 
    } 

Edit:

Bạn cũng phải sử dụng một mảng mà các bản đồ các tế bào kiểm tra và trong cellForRowAtIndexPath bạn phải xác minh nếu accessoryType nên được kiểm tra hay không.

+6

Bạn không bao giờ nên lưu trữ trạng thái đã chọn trong chính ô bảng - chúng có thể được sử dụng lại cho nhiều hàng khi cuộn bảng và bạn sẽ cần khôi phục trạng thái đã chọn bằng cách nào đó ... – Vladimir

+0

Tôi cũng có một mảng ánh xạ các ô đã chọn và trong ô cho hàng tại đường dẫn chỉ mục Tôi xác minh xem accessoryType có được kiểm tra hay không –

8

Hàng "Đã chọn" trong ứng dụng Đồng hồ là ô có UITableViewCellAccessoryCheckmark loại phụ kiện.

bước có thể để đạt được điều đó là:

  1. cửa hàng kiểm tra/không kiểm tra nhà nước ở đâu đó cho mỗi hàng.
  2. Trong cellForRowAtIndexPath: phương pháp tế bào trong tài sản accessoryType kiểm tra hàng loạt tế bào để UITableViewCellAccessoryCheckmark
  3. Trong cellForRowAtIndexPath: cho tế bào trong tài sản accessoryType không kiểm tra hàng thiết tế bào để UITableViewCellAccessoryNone
  4. Khi tế bào được chọn (khai thác) bỏ chọn nó, đảo ngược kiểm tra của nó tình trạng và tế bào tải lại ở con đường index
30

Cách dễ nhất tôi đã tìm thấy:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark; 
} 

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath { 
    [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryNone; 
} 

Bạn có thể thấy các tế bào được lựa chọn bằng cách gọi:

NSArray *selectedCells = [self.tableView indexPathsForSelectedRows]; 
+0

Câu trả lời của bạn thật tuyệt vời .. +1 nhưng tôi có vấn đề nhỏ .. Cách nhận giá trị từ NSArray. Nếu bạn có thể vui lòng chỉnh sửa câu trả lời của bạn Cảm ơn – GoCrazy

+1

Tôi thích giải pháp của bạn, nhưng có vẻ như nếu tôi chọn một ô, nhiều ô được chọn, với khoảng cách khoảng chiều cao màn hình. Tôi sẽ sử dụng một mảng để lưu trữ trạng thái đã chọn cho từng ô hiện tại. –

11

Chơi với

tableView.allowsMultipleSelection

này đã cứu tôi giờ Rắc rối. Đã tìm thấy here.

+6

Đây không phải là 'allowMultipleSelection'? –

+1

Có, nó cho phépMultipleSelection, không cho phépMultipleAnswersAccepted –

0

Nếu bạn đang sử dụng Bảng phân cảnh, chỉ cần nhấp vào Bảng xem và sau đó trên Thanh tra thuộc tính trên bảng điều khiển bên phải, hãy đặt thuộc tính "lựa chọn" thành "Nhiều lựa chọn". Tôi đã xác minh điều này bằng cách sử dụng phiên bản 8.2.1 của Xcode.

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