2012-02-18 27 views
9

Tôi đang cố gắng sử dụng bảng phân cảnh/phân đoạn để xử lý chuyển đổi giữa UITableView với cả quá trình chuyển đổi chuẩn cũng như nút tiết lộ chi tiết. Sau khi đọc một vài bài viết khác nhau trên đây tôi đã thiết lập dự án của tôi theo cách này:IndexPath cho segue từ accessoryButton

  1. Tie segue chính giữa UITableViewCell và ViewController
  2. Tie segue thứ cấp từ ViewController mẹ để ViewController mới
  3. Thực hiện accessoryButtonTappedForRowWithIndexPath như sau :

    -(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath { 
        [self performSegueWithIdentifier:@"DetailSegue" sender:self]; 
    } 
    

này hoạt động tuyệt vời và prepareForSegue: sender: tôi được c như mong đợi. Vấn đề là, tôi cần biết indexPath cho phần tử được chọn. Các segue từ UITableViewCell lấy indexPath như thế này:

NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 

Thật không may khi tôi cố gắng để làm điều đó khi được gọi là accessoryButton, trả về null.

Các câu hỏi ban đầu tôi dựa một số mã này tắt của là ở đây: Detail Disclosure Button and Segues

Có một phương pháp tableView trả về indexPath cho accessoryButtons? Tôi có cần truy cập vào indexPath theo cách khác không?

Trả lời

16

Bạn không cần phải ghi đè accessoryButtonTappedForRowWithIndexPath.

Trong prepareForSegue, khi làm việc với một nút tiết lộ chi tiết, thay vì:

[self.tableView indexPathForSelectedRow] 

sử dụng:

[self.tableView indexPathForCell:sender] 

Người gửi đã là tế bào tiết lộ nút chi tiết của.

+2

Cảm ơn Adam, đây phải là câu trả lời được chấp nhận! – Pat

+0

Khi tôi đã làm điều này, người gửi là TableViewController tôi đã nhập. Vì vậy, trong performSegue, tôi đã chuyển ô như người gửi –

+0

làm cách nào để thực hiện điều này trong Swift 3? – nyxee

13

Các sender đối số là, theo các tài liệu:

Đối tượng mà bạn muốn sử dụng để bắt đầu segue. Đối tượng này được tạo sẵn cho mục đích thông tin trong khoảng thời gian thực tế.

Tôi không thấy bất kỳ lý do nào khiến bạn không thể sử dụng đường dẫn chỉ mục làm người gửi thay vì self, sau đó truy cập đường dẫn chỉ mục trong prepareForSegue:.

Nếu điều đó không làm việc, lưu trữ đường dẫn chỉ mục trong một Ivar và truy cập vào đó trong prepareForSegue

+0

Vượt qua indexPath khi người gửi hoạt động tốt. Có vẻ khá rõ ràng khi ai đó đề cập đến nó. Cảm ơn. – valdarin

+0

Ý tưởng tuyệt vời, tôi đã bị xáo trộn khi nghĩ rằng chúng tôi có thể cần một biến địa phương chỉ để chuyển thông tin này qua – trapper

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