2012-11-05 35 views
7

Tôi đang tạo ứng dụng iOS có nền tảng xem bảng. Đây là những gì tôi muốn làm. Tableview1 -> Tableview2 Khi tôi chọn một trong tableCell, tableView2 mới được hiển thị. Tôi muốn chập chờn ô trước khi tableView mới được hiển thị. Tuy nhiên, hilight quá chậm vì tải dữ liệu tableView mới. Tôi đã tra cứu điều này. Lý do tại sao là prepareForSegue được gọi trước didSelectRowAtIndexPath.Cách gọi didSelectRowAtIndexPath trước khi chuẩn bịForSegue?

Sau đó, bạn có thể cho tôi biết cách gọi didSelectRowAtIndexPath trước prepareForSegue?

Hoặc cho tôi biết cách thiết lập ô bảng khi chọn ô.

Tất cả tốt nhất.

Trả lời

1
  1. Make segue cho controller-> khiển
  2. bốc chạy dữ liệu trong didselectrowatindexpath
  3. Khi nó thực hiện -> thực hiện segue bạn
+0

Performsegue là câu trả lời tốt hơn. Nhưng một vấn đề khác đã xảy ra. Nhưng xin cảm ơn! –

0

Đây là cách bạn nên thiết lập điểm kiểm soát của bạn:

  1. Khi bộ điều khiển xem nhà ở Chế độ xem bảng 1 tải, hãy tải trong dữ liệu của Chế độ xem bảng 1.
  2. Trong tableView:didSelectRowAtIndexPath: được gọi, kích hoạt khoảng cách bằng cách sử dụng performSegue:.
  3. Khi xem bộ điều khiển nhà ở Bảng View 2 tải, tải dữ liệu cho bảng Xem 2.

Có vẻ như bạn có thể tải dữ liệu cho Table View 2 sớm --- đó là lý do tại sao bạn' lại thấy sự chậm trễ. Bởi vì bạn đang kết thúc chuỗi chính với tải dữ liệu của mình, giao diện người dùng không có khả năng cập nhật và hiển thị cho bạn điểm đánh dấu màu xanh lam.

Nếu bạn tải dữ liệu của mình theo phương pháp viewDidLoad, bạn sẽ tránh được các tải đắt tiền khi người dùng chọn ô xem bảng. Bạn chỉ nên nói với bộ điều khiển xem của bạn để thực hiện segue cho bộ điều khiển xem chi tiết trong phương thức tableView:didSelectRowAtIndexPath:.

+0

Cảm ơn nó hoạt động. performSegue là câu trả lời tốt hơn cho đến nay. –

20

Bạn đang chia hai cách khác nhau để thực hiện.

1 - Đầu tiên Alternative - chỉ sử dụng cốt truyện và prepareForSegue:

Kết nối tế bào nguyên mẫu của mình vào viewController thứ hai trong storyboard (kết nối phải bắt đầu từ các tế bào và kết thúc vào viewController giây). Trong trường hợp này, bạn phải sử dụng chỉ phương thức PrepareForSegue và không didSelectRowAtIndexPath. VC thứ hai được đẩy tự động sau khi PrepareForSegue.

2 - Thứ hai Alternative - sử dụng didSelectRowAtIndexPath:

Bạn sử dụng didSelectRowAtIndexPath chỉ khi bạn kết nối segue từ viewController đầu tiên (chứ không phải từ các tế bào) đến viewController thứ hai. Khi kết thúc phương thức didSelectRowAtIndexPath, bạn phải gọi performSegue.

+0

Cảm ơn! nó hoạt động, nhưng một vấn đề khác đã xảy ra. Tôi sẽ đăng chủ đề mới về điều này. –

+16

Nếu bạn đang sử dụng thay thế đầu tiên và cần thực hiện hành động dựa trên vị trí của ô trong bảng, hãy sử dụng hàm này để lấy đúng indexPath: NSIndexPath * indexPath = self.tableView.indexPathForSelectedRow; – mpemburn

+0

Giải pháp thay thế thứ hai đã làm việc cho tôi. –

1

Những gì bạn cần là chức năng sau. Nó sẽ được gọi trước khi chuẩn bịForSegue. Trước tiên, bạn cần phải xác định một var trong bạn lớp sau đó đặt nó trong hàm này như dưới đây:

var selectedIndexPath: NSIndexPath = NSIndexPath() 

override func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? { 
     selectedIndexPath = indexPath 
     return indexPath 
    } 

Sau đó, cuối cùng bạn có thể sử dụng giá trị này trong preparedForSegue chức năng

+0

Rất tốt cho tôi cảm ơn :) Hamid –

+0

@AadilAli Không vấn đề gì :) – Hamid

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