2010-01-27 24 views
228

Tôi cần xóa hàng 1 của bảng trong một hàm tôi đã xác định. Để sử dụng deleteRowAtIndexPath, bạn phải sử dụng IndexPath với một phần và hàng được xác định. Làm thế nào tôi có thể tạo một đường dẫn chỉ mục như thế này?Cách tạo NSIndexPath cho TableView

Một mảng có int {1} là thành viên duy nhất của nó sẽ bị lỗi; thông điệp NSLog nói rằng phần cũng cần được xác định.

* Edit -> Mã liên quan đến tế bào xóa:

NSIndexPath *myIP = [[NSIndexPath alloc] indexPathForRow:0 inSection:0]; 
    NSArray *myArray = [[NSArray alloc] initWithObjects:myIP, nil]; 
// [self.tableView beginUpdates]; 
    [self.tableView deleteRowsAtIndexPaths:myArray withRowAnimation:UITableViewRowAnimationFade]; 
// [self.tableView endUpdates]; 

Trả lời

612

Sử dụng [NSIndexPath indexPathForRow:inSection:] để nhanh chóng tạo ra một con đường chỉ mục.

Edit: Trong Swift 3:

let indexPath = IndexPath(row: rowIndex, section: sectionIndex) 
+2

Cảm ơn bạn đã trả lời. Chương trình vẫn treo dù - NSLog báo cáo: *** Chấm dứt ứng dụng do ngoại lệ uncaught 'NSInvalidArgumentException', lý do: '*** - [NSIndexPath indexPathForRow: inSection:]: unrecognized chọn gửi đến dụ –

+0

Tôi ban đầu figured nó được một vấn đề IndexPath. Có chuyện gì khác xảy ra không? Dường như tôi có thể đang sử dụng xóa không chính xác .. –

+0

- [NSIndexPath indexPathForRow: inSection:] không có trong tài liệu của tôi. Có câu trả lời nào sử dụng các API được tài liệu không? (Tôi thừa nhận có một chút lạ khi nó không có trong đó. WTH ?!) – Olie

115

indexPathForRow là một phương pháp lớp học!

Mã nên đọc:

NSIndexPath *myIP = [NSIndexPath indexPathForRow:0 inSection:0] ; 
17

câu trả lời bắt buộc trong Swift: NSIndexPath(forRow:row, inSection: section)

Bạn sẽ nhận thấy rằng NSIndexPath.indexPathForRow(row, inSection: section) không có sẵn trong nhanh chóng và bạn phải sử dụng phương pháp đầu tiên để xây dựng các indexPath.

+0

Tôi gặp vấn đề tương tự! Tôi đã sử dụng 'forRow: 0' và' inSection: 0'. Nó hoạt động tốt. Nó chỉ chứa đối tượng đầu tiên từ mảng! Làm thế nào tôi có thể sửa chữa nó? Bạn có thể giúp tôi được không? –

+0

Bạn có thể xây dựng? Phương thức này có nghĩa vụ trả về một NSIndexPath cho hàng và phần bạn chỉ định. Vì vậy, điều này sẽ chỉ trả về indexPath [0,0] – JohnVanDijk

17

Đối với Swift 3, bây giờ là: IndexPath(row: rowIndex, section: sectionIndex)

+6

Cảm ơn bạn đã thêm Swift 3. Trình biên dịch nắm chặt lấy tôi cho 'let cell = self.myTableView.cellForRow (tại: NSIndexPath (hàng: 0, phần: 1))' và thay đổi nó thành 'let cell3 = self.myTableView.cellForRow (tại: IndexPath (hàng: 0, section: 1))', vì vậy chúng dường như đang di chuyển từ NSIndexPath sang IndexPath –

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