2013-03-07 28 views
5

Tôi đã xem qua một lỗi lạ trong ứng dụng của tôi.UITableView đẩy segue kích hoạt nhiều lần

Thiết lập

Một đơn giản ứng dụng Master-Detail, phong cách iPhone (tức là không có cái nhìn chia, không popover, chỉ là bộ điều khiển điều hướng, bộ điều khiển xem bảng và bộ điều khiển chế độ xem).

enter image description here

Lỗi

  1. cảm ứng một "nền" một phần của xem bảng (những phần màu xám sẫm màu trên ảnh chụp màn hình của tôi) như một tiêu đề phần hoặc footer.
  2. Trong khi vẫn giữ ngón tay trên màn hình, hãy chạm vào một ô nhiều lần.
  3. Thả tất cả các ngón tay ra. Các "chi tiết" xem sẽ đẩy bình thường, nhưng khi chạm vào nút quay lại, bạn sẽ thấy rằng quan điểm chi tiết được xếp chồng lên nhau nhiều lần như bạn chạm vào các tế bào ở bước 2.

enter image description here

Bạn có thể cũng chạm nhiều tế bào ở bước 2 và chế độ xem đích của họ sẽ được xếp chồng lên nhau theo thứ tự đúng :)

tạo lại nó

tôi đã có thể tái tạo các lỗi với một ứng dụng sạch, vừa tạo, và trên t anh phát hành lần cuối ứng dụng Twitter cho iPhone (bằng cách chạm vào nhãn "Đang tải" bằng ngón tay số 1 và chạm vào một tweet nhiều lần).

Tuy nhiên, tôi không thể kích hoạt hành vi tương tự trong ứng dụng Cài đặt, trong tab "Chung" (chế độ xem bảng được nhóm).

Lỗi được sao chép trên iOS 6.0 và 6.1. Tôi không có thiết bị có phiên bản cũ hơn để kiểm tra.

Câu hỏi

Đây có phải là một thủ thuật được biết đến khi tạo menu/table xem ứng dụng dựa trên và nếu như vậy là có một giải pháp để ngăn chặn hành vi này (lạ)? Hay đây có phải là lỗi của iOS hay không (và nếu có, nó đã được Apple biết đến) chưa?

+0

Tôi không thể tạo lại lỗi này trong ứng dụng - ngay sau khi chọn ô, một khoảng cách được đẩy: Tôi KHÔNG THỂ chọn một số ô như bạn - vì vậy có thể liên quan đến cách ứng dụng cụ thể của bạn (hoặc các ứng dụng khác)) xử lý push segue. Một câu hỏi: tại sao bạn có 3 segues trên storyboard của bạn giữa bảng của bạn và viewController sau đây? Một là đủ – Vinzzz

+0

Đó là chỉ để cho phép thử nghiệm các segue trên nhiều tế bào. Chế độ xem bảng chứa các ô tĩnh và tôi đã tạo một khoảng cách cho mỗi ô. Tuy nhiên, ứng dụng "thực" của tôi sử dụng các ô động, chỉ với một khoảng cách (được tạo bằng ctrl + kéo lên bộ điều khiển tiếp theo, khá cổ điển). Tôi vừa thêm vào câu hỏi mà tôi chỉ thử nghiệm trên iOS 6.x. Bạn đang thử nghiệm trên một phiên bản cũ hơn? –

+0

Và bạn có lỗi này ngay cả khi thiết lập segue này như là một 'tùy chỉnh' một, và làm những việc lập trình: gọi 'performSegueWithIdentifier' từ bảng của bạn delegate' didSelectCellAtIndexPath: '? Đây là cách tôi xử lý nó, tôi không thể chọn một số ô (iOS 6) – Vinzzz

Trả lời

0

này được cố định bởi Apple trong iOS 7.

Đối với các phiên bản trước của hệ điều hành, Dan F's answer nên làm các trick.

3

Một biện pháp stop-gap có thể bạn có thể sử dụng là thực hiện

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender 

Và sử dụng một lá cờ boolean hoặc một cái gì đó để chỉ ra rằng bạn đang cố gắng để thực hiện segue đó. ví dụ:

BOOL doingSegue = NO; 

-(void) viewWillAppear 
{ 

    doingSegue = NO; 
} 

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender 
{ 

    if ([identifier isEqualToString:@"MySegueIdentifier"]) 
    { 
     if (doingSegue) 
     { 
      return NO; 
     } 
     else 
     { 
      doingSegue = YES; 
      return YES; 
     } 
    } 
    return YES; 
} 

Swift Version

var doingSegue = false 

override func viewWillAppear(_ animated: Bool) { 
    doingSegue = false 
} 

override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool { 
    if identifier == "MySegueIdentifier" { 
     if doingSegue { 
      return false 
     } 
     else { 
      doingSegue = true 
      return true 
     } 
    } 
    return true 
} 
Các vấn đề liên quan