2012-01-25 30 views
6

Tôi đang cố gắng triển khai quá trình chuyển đổi lật như iBooks dưới dạng bảng phân cảnh. Các segue nên đẩy resp. bật destinationViewController lên/từ ngăn xếp UINavigationControllers.Tùy chỉnh phân đoạn đẩy/mở UIViewControllers

Tôi có thể đẩy chế độ xem trong phương thức phân cách perform nhưng tôi không thể bật. Khi tôi bật bộ điều khiển ngay sau khi tạo hoạt ảnh lật của tôi, hoạt ảnh không chạy và gọi lại của nó - mà nên thực hiện [[UIApplication sharedApplication] endIgnoringInteractionEvents] sẽ không bao giờ được gọi và kết quả ứng dụng của tôi đã chết.

Vì vậy, tôi đã cố gắng đẩy/bật trong phương thức ủy quyền animationDidStop:anim:flag nhưng nó không bao giờ được gọi với cờ được đặt thành true.

Tôi giả định rằng segue được deallocated trước khi phương thức đại biểu được gọi. Tôi có thể làm gì khác?

+0

Bạn phải đang sử dụng iOS5 nếu bạn đang sử dụng bảng phân cảnh. Tại sao không sử dụng 'UIPageViewController'? Nó thực hiện tất cả các hành vi lật trang tiêu chuẩn mà bạn thấy iBooks. –

+1

Tôi không nói về pagecurl nhưng về lật từ kệ sách ibooks vào cửa hàng và ngược. – cschuff

+0

Về cơ bản, bạn muốn có hai bộ điều khiển chế độ xem xuất hiện "back-to-back" như nó, để bạn có thể lật giữa hai người theo ý muốn, trong cùng một không gian, so với trên một ngăn xếp có ưu tiên hơn khác, ya? Tôi sẽ không đăng câu trả lời này cho đến khi tôi chắc chắn 100%, nhưng tôi tự hỏi liệu tốt nhất là nên cung cấp ảo ảnh này (vì vậy hãy nói rằng bạn có chế độ xem bảng và chế độ xem bản đồ. segue đến trung học với một flip, và làm cho đảo ngược lật được "trở lại" cho mỗi se. Sẽ phải cố gắng này ra ...) –

Trả lời

5

Hãy tha thứ cho tôi nếu tôi hoàn toàn hiểu nhầm câu hỏi này, nhưng có vẻ như bạn chỉ muốn thực hiện lật ngang cơ bản qua lại giữa hai bộ điều khiển chế độ xem. Và ngay cả khi bạn đã tìm ra điều này, có lẽ nó sẽ giúp bất cứ ai khác có cùng một câu hỏi.

(1) Trong bảng phân cảnh (có ViewController A & B) tạo Phân đoạn phương thức từ A đến B. Đặt cho nó một số nhận dạng (showViewControllerB) và chọn Chuyển tiếp: Lật ngang.

Chúng tôi thiết lập các giao thức và các đại biểu:

(2a) Trong ViewControllerB.h thêm trên @ interface:

@class ViewControllerB; 

@protocol ViewControllerBDelegate 
    - (void)viewControllerBDidFinish:(ViewControllerB *)controller; 
@end 

(2b) Thêm các đại biểu như một thuộc tính:

@property (weak, nonatomic) id <ViewControllerBDelegate> delegate; 

(3a) Trong ViewControllerB.m tổng hợp:

@synthesize delegate; 

(3b) Và đại biểu trong phương pháp này để lật lại:

- (IBAction)flipBack:(id)sender 
{ 
    [self.delegate viewControllerBDidFinish:self]; 
} 

(4) Trong ViewControllerA.h thêm tại rất đầu #import "ViewControllerB.h" và trên hết @ interface <ViewControllerBDelegate>

(5a) trong ViewControllerA.m thêm phương pháp để phù hợp với các giao thức:

- (void)viewControllerBDidFinish:(ViewControllerB *)controller 
{ 
    [self dismissModalViewControllerAnimated:YES]; 
} 

(5b) Sau đó thiết lập nó như là các đại biểu trong prepareForSegue:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"showViewControllerB"]) { 
     [[segue destinationViewController] setDelegate:self]; 
    } 
} 

Tôi hy vọng điều này sẽ trả lời câu hỏi của bạn. Nếu tôi hiểu lầm, hãy cho tôi biết.

0

Câu hỏi của bạn hơi bối rối vì vậy hãy trộn lẫn với pop, push, lật và backflip. Tôi không chắc chắn nếu ai có thể trả lời câu hỏi của bạn, nhưng tôi có thể nói những gì tôi đã làm.

Nếu tôi đẩy chế độ xemController vào ngăn điều khiển điều hướng và đặt Kiểu phân đoạn Storyboard thành Push, nó sẽ được đẩy vào chế độ xem từ phải sang trái. Một nút quay lại xuất hiện và hiển thị tiêu đề của presentingViewController trong đó.

Nếu tôi đặt Chế độ phân đoạn bảng phân cảnh thành Phương thức tôi có thể đặt Chuyển đổi thành Lật ngang (có vẻ như bạn muốn). Nhưng sau đó không có Nút Quay lại nào xuất hiện. Trong presentedViewController tôi bỏ qua những cái nhìn với:

[self.presentingViewController dismissViewControllerAnimated:YES completion:nil]; 

Nó sẽ lật xem thứ hai trở lại với một flip đúng.

Nhưng đây là giải pháp bẩn và không được khuyến cáo bởi táo.

http://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/ManagingDataFlowBetweenViewControllers/ManagingDataFlowBetweenViewControllers.html#//apple_ref/doc/uid/TP40007457-CH8-SW9

Luke Dubert đưa cho bạn một ví dụ làm thế nào để thực hiện các đại biểu.

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