5

Điều này có vẻ là patten được sử dụng trong suốt các ứng dụng của Apple; Tạo một bản ghi mới được thực hiện thông qua Chế độ xem phương thức cần được lưu hoặc hủy để tiếp tục và việc chỉnh sửa bản ghi được thực hiện thông qua chế độ xem được đẩy lên ngăn điều hướng. Nó có vẻ không đúng về cơ bản sao chép ViewController của tôi để 'thêm' và 'chỉnh sửa' nhưng có một số khác biệt về cách thức hoạt động của ViewControllers được đẩy và phương thức phức tạp.Tôi có nên sử dụng cùng một chi tiết ViewController để làm việc cả hai phương thức và khi được đẩy?

Tôi nên làm như thế nào để có thể bao gồm cả hai cơ sở?

-

Sự khác biệt bao gồm.

Khi được đẩy lên ngăn xếp, thanh điều hướng sẽ xuất hiện ở đầu Chế độ xem và có thể được định cấu hình để chứa các nút hủy/lưu. Khi trình bày theo cách này, đây không phải là trường hợp để sao chép giao diện mà thanh công cụ cần phải được tạo riêng và đóng/lưu các nút được thêm vào thay vào đó.

Khi gạt bỏ một cái nhìn đẩy chúng tôi gửi một thông điệp tới bộ điều khiển chuyển hướng [self.navigationController popViewControllerAnimated:YES];, khi gạt bỏ một cái nhìn phương thức chúng tôi gửi một thông điệp tới tự [self dismissModalViewControllerAnimated:YES];

+1

Làm thế nào chính xác được "những điều phức tạp" giữa đẩy và trình bày phương thức? –

+0

Câu hỏi đã chỉnh sửa chi tiết hơn – trapper

+3

Tôi muốn tiếp cận điều đó bằng cách xác định giao thức (trapperViewDismisser) cho phép trình điều khiển chế độ xem cho biết nó đã sẵn sàng để loại bỏ. Sau đó, hãy tuân thủ trapperViewDismisser và đặt đại biểu thành tự. Điều này di chuyển sự khác biệt ra khỏi lớp hiển thị VC (đã biết sự khác biệt). – Thompsonian

Trả lời

0

Bạn có thể thêm UIToolbar tại InterfaceBuilder, và sau đó chỉ cần che giấu nó trong viewDidLoad khi self.navigationController không phải là nil.

Đối với miễn nhiệm, bạn có thể có một cái gì đó như:

- (void)didCancel { 
    [self.navigationController popViewControllerAnimated:YES] || [self dismissModalViewControllerAnimated:YES]; 
} 

này sẽ shortcircuit nếu viewController của bạn là một phần của một navigationcontrol, và sử dụng dismissModalViewControllerAnimated khác.

Điều này sẽ phù hợp với nút hủy của bạn. Đối với nút lưu của bạn, nó rất hữu ích để gọi một số loại phương pháp đại biểu như:

- (void)didSave { 
    // do your saving juju here 
    if([self.delegate respondsToSelector:@selector(viewController:didSave:]) { 
     [self.delegate viewController:self didSave:whatJustGotSaved]; 
    } 
    [self.navigationController popViewControllerAnimated:YES]; // noop if currently modal 
} 

Thực hiện của đại biểu sau đó, bạn có thể đặt:

- (void)viewController:(UIViewController*)viewController didSave:(NSObject*)whatJustGotSaved { 
    // do stuff with parameters 
    [self.modalViewController dismissModalViewControllerAnimated:YES]; // noop if not modal 
} 
Các vấn đề liên quan