2009-06-16 26 views
10

Tôi cần cập nhật chế độ xem gốc trên iPhone sau khi bật chế độ xem con khỏi ngăn điều hướng. Làm cách nào để tôi có thể thiết lập chế độ xem cha mẹ để được thông báo hoặc nhận cuộc gọi phương thức tự động khi trẻ được bật ra khỏi ngăn xếp và phụ huynh sẽ hiển thị lại?Cách tự động gọi phương thức sau khi bật trình điều khiển chế độ xem khỏi ngăn xếp trên iPhone

Người dùng nhập dữ liệu trên trang con mà tôi muốn hiển thị trên trang chính sau khi người dùng hoàn tất và bật chế độ xem.

Cảm ơn sự giúp đỡ của bạn!

Trả lời

13

Tôi vừa giải quyết vấn đề tương tự này - và câu trả lời ở trên gần như chính xác, họ chỉ quên thiết lập đại biểu.

Tôi có bộ điều khiển chế độ xem gốc hiển thị kích thước danh sách, gọi bộ điều khiển chế độ xem con có thể thay đổi kích thước của danh sách và phải cập nhật kích thước khi trả về.

Khi tôi tạo ra cái nhìn của bố mẹ tôi (SettingsView dưới đây), và thêm nó như là quan điểm gốc của một UINavigationController, tôi chắc chắn rằng để thiết lập đại biểu của UINavigationController trước khi tôi hiển thị xem - đó là phần quan trọng:

SettingsView *sv = [[SettingsView alloc] initWithNibName:@"SettingsView" bundle:nil]; 
UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:sv]; 
[nc setDelegate:sv]; 

Trong giao diện phụ huynh, thực hiện các giao thức UINavigationControllerDelegate:

@interface SettingsView : UIViewController <UINavigationControllerDelegate> 

và cung cấp các phương pháp willShowViewController:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
    // Your code to update the parent view 
} 

Điều này được gọi sau khi chế độ xem con bị loại bỏ và trước khi chế độ xem gốc được hiển thị lại.

+0

Wow cảm ơn, đã có cùng một vấn đề. – drew010

+0

Đừng quên chấp nhận câu trả lời đúng. –

+0

ur quan sát là rất quan trọng .... unforgiven3 câu trả lời là chính xác nhưng nếu u không thực hiện các giao thức UINavigationControllerDelegate trong ViewController nơi ur gọi willShowViewController nó sẽ không bao giờ hoạt động, và cũng là ViewController cha mẹ sẽ tiếp tục phàn nàn ur gửi "ViewController __strong để thông số của id loại tương thích

6

Tôi cũng cần phải làm một việc như thế này. Trong ViewController đó thuộc sở hữu của tôi UINavigationController, tôi đã phải thực hiện willShowViewController, như thế này:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated { 
} 

Đó phương pháp được gọi là bất cứ khi nào UINavigationController thay đổi quan điểm. Nếu tôi hiểu câu hỏi của bạn một cách chính xác, tôi nghĩ rằng điều này nên làm những gì bạn muốn.

3

Tôi nghĩ có sự nhầm lẫn ở đây. UIView s không được đẩy đến và xuất hiện từ ngăn xếp của UINavigationController. Những gì đang được đẩy và popped là UIViewControllers, mà lần lượt xử lý một hoặc (thường xuyên hơn) một số quan điểm mỗi.

May mắn thay, UIViewController có những phương pháp:

-(void) viewWillAppear:(BOOL)animated; 
-(void) viewDidAppear:(BOOL)animated; 
-(void) viewWillDisappear:(BOOL)animated; 
-(void) viewDidDisappear:(BOOL)animated; 

Chúng được gọi là bất cứ khi nào xem là sắp (dis) xuất hiện, hoặc có chỉ (dis) xuất hiện. Tôi làm việc với thanh tab, chế độ xem phương thức và bộ điều khiển điều hướng. (Và bạn nên sử dụng những điều này khi bạn triển khai các bộ điều khiển tùy chỉnh.)

Vì vậy, nếu tôi hiểu chính xác, bạn chỉ cần ghi đè phương thức viewWillAppear: hoặc viewDidAppear: trang gốc "(có thể được xử lý bởi một số UIViewController) và đặt mã để cập nhật giao diện của trang để phản ánh dữ liệu vừa nhập.

(Nếu tôi nhớ chính xác, bạn phải đảm bảo rằng UINavigationController nhận được thông báo viewWill/DidAppear: khi được hiển thị lần đầu tiên, để các tin nhắn này sau này được gửi tới bộ điều khiển con của nó. trong IB có thể bạn không phải lo lắng về điều đó.)

0

Nếu bạn cần thông báo cho bộ điều khiển này với bộ điều khiển khác, bạn có thể sử dụng mẫu ủy quyền như mô tả here (see 2nd answer).

Rất tiếc, không có thông báo tự động (AFAIK) cho tác vụ chính xác như bạn mô tả. Để đáp ứng nhu cầu của bạn, bạn có thể gửi tin nhắn cho đại biểu (tức là với bộ điều khiển chính) trong chức năng viewWillDisappear của bộ điều khiển con bạn.

+1

là điều rườm rà nếu bộ điều khiển con của bạn có con. Trong trường hợp đó 'viewWillDisappear' được gọi khi đứa trẻ đẩy cháu cũng như khi đứa trẻ bị xuất hiện. Chỉ trong trường hợp sau bạn sẽ muốn nhắn tin cho phụ huynh. Tôi chưa tìm được một cách thanh lịch trong vấn đề đó. –

2

Câu trả lời của Felixyz đã làm điều đó cho tôi. Gọi phương thức xem sẽ xuất hiện, phương thức sẽ chạy mã trong đó mỗi khi khung nhìn xuất hiện. Khác với chế độ xem đã tải, chỉ chạy mã khi chế độ xem được tải lần đầu tiên. Vì vậy, chế độ xem gốc của bạn sẽ không tự cập nhật nếu chế độ xem con thay đổi thông tin được hiển thị trong phụ huynh và sau đó được bật ra khỏi bao. Nhưng nếu cha mẹ gọi chế độ xem sẽ xuất hiện, mã sẽ được chạy mỗi khi chế độ xem hiển thị sao lưu.

Đảm bảo gọi phương thức siêu cùng một lúc. Việc triển khai đúng sẽ trông giống như sau:

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    NSLog(@"View Appearing"); 
} 
Các vấn đề liên quan