2010-09-21 67 views
5

Trong lớp con của tôi về NSObject Tôi muốn gọi cái gì đó nhưGọi presentModalViewController từ NSObject lớp

[[self navController] presentModalViewController:myView animated:YES]; 

Nhưng không ai trong số cố gắng của tôi đã thành công. Làm thế nào tôi có thể gọi một chế độ xem phương thức nếu tôi không ở trong một lớp con của UIViewController?

Giải pháp:

#import "myProjectNameAppDelegate.h" 
// ... 
MyViewController *myView = [[MyViewController alloc] init]; 
myProjectNameAppDelegate *appDelegate = (myProjectNameAppDelegate *)[[UIApplication sharedApplication] delegate]; 
[[appDelegate navController] presentModalViewController:myView animated:YES]; 

Trả lời

2

Tôi không thấy một cách để hiển thị một cái nhìn phương thức mà không có một ViewController. Bạn phải lưu trữ một tham chiếu đến một UIViewController trong lớp của bạn để bạn có thể truy cập nó. Hoặc thiết lập một thuộc tính trong AppDelegate của bạn, mà bạn có thể nhận được bằng cách gọi [[UIApplication sharedApplication] delegate];

+0

Tôi có thuộc tính trong 'AppDelegate' được gọi là" navController ". Tại sao tôi không thể truy cập '\t \t [[[UIApplication sharedApplication] navController] presentModalViewController: myView hoạt hình: YES]; 'Tôi có phải khai báo một thuộc tính khác và đặt thuộc tính này thành' self' trong 'didFinishLaunchingWithOptions:'? – testing

+0

Bạn sẽ có thể truy cập trực tiếp khi bạn dán, nó có hoạt động không? – jv42

+0

Không, tôi nhận được "'UIApplication' có thể không trả lời '-navController'". Với 'delegate' tôi nhận được" '-navController' không tìm thấy trong giao thức (s) " – testing

0

Nếu bạn giữ điều hướngController hoặc một số viewController, bạn có thể trình bày một bộ điều khiển xem phương thức.

myView của bạn là gì? Nó có phải là một khung nhìn không, nó là một viewController. Tôi hy vọng rằng nó là một viewcontroller nếu không, đây là lý do mã của bạn không chạy

+0

'myView' là một ViewController. 'MyViewController * myView = [[MyViewController alloc] init];' Nhưng tôi không thể gọi chế độ xem phương thức từ cùng ViewController (đã thử điều đó, nhưng không có gì xảy ra). Tôi không thể truy cập vào NavigationController vì tôi đang ở trong lớp 'NSObject'. Tôi nhận được cảnh báo "xxx có thể không phản hồi với xxx". – testing

+0

sau đó, có nghĩa là bạn không thể truy cập navController.Vì vậy, cách tốt là khi bạn init đối tượng của bạn, vượt qua nó một view Controller: 'MyObject * obj = [[MyObject alloc] initWithViewController: myViewController];' sau đó lưu trữ myViewController của bạn ở đâu đó – vodkhang

+0

Khi bạn cần trình bàyModalViewController làm: '[myViewController presentModalViewController hoạt hình: YES]; ' – vodkhang

6

cách tốt hơn để gọi một presentModalViewController là, đi qua viewcontroller đến lớp NSobject. gọi nsobject chức năng từ uiviewcontroller Đây là mã với thư dụ

Theo quan điểm điều khiển // xem hiện tại của bạn

[nsobjectclassObject OpenMailComposer:self]; // này sẽ đưa người viewController để NSobject lớp

Trong lớp NSObject// có thể chia sẻ lớp

-(void)OpenMailComposer:(UIViewController*)view 
{ 

    viewControllertoShow = view; // viewControllertoShow is UIVIewcontroller object 
    MFMailComposeViewController *mailView = [[MFMailComposeViewController alloc]init]; 
    mailView.mailComposeDelegate = self; 
    [mailView setSubject:@"Hey! check this out!"]; 
    [viewControllertoShow presentModalViewController:mailView animated:YES]; 
} 

Đối với sa thải từ NSObject class bạn có thể làm như sau

[viewControllertoShow dismissViewControllerAnimated:YES]

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