viewcontroller中appdelegate和delegate之间的区别

时间:2011-12-04 18:35:37

标签: iphone objective-c delegates uinavigationcontroller uiapplicationdelegate

我想将一个示例代码与(例如SampleCode项目)我的iPhone应用程序集成。在第一个ViewController中的示例代码添加到MainWindow.xib中,并链接到下面代码中创建的viewController

@interface SampleCodeAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    firstViewController *viewController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet firstViewController *viewController;

和viewController用initWithCoder实例化,当点击按钮时出现firstView可以打开调用OpenCamera方法,如下面的代码所示。

//in firstViewController.mm file

- (id)initWithCoder:(NSCoder *)coder {

    if (self = [super initWithCoder:coder]) {

    }

    [self initLocal];

    return self;
}
//to open camera in SampleCode application
    - (IBAction)OpenCamera {

        UIApplication *app = [UIApplication sharedApplication];
        SampleCodeAppDelegate* delegate = [app delegate];
        UIViewController* uiViewCont = [delegate viewController];
        ((CCamera*)m_pCamera)->Camera(uiViewCont);
    }

在我的基于导航的应用程序(MyApplication)中,我想直接使用viewController MyApplicationViewControllerA之一调用SampleCode的firstViewController而不添加到MyApplicationAppDelegate。

所以我想在MyApplicationViewControllerA viewController中创建委托,该委托应该作为SampleCode应用程序中的appdelegate。 我无法打开相机,但关闭相机后,我无法打开除MyApplicationViewControllerA之外的任何其他MyApplication视图。 我正在尝试pushViewController和modalViewController无法呈现其他View。

我对代表并不感到困惑。所以我想知道AppDelegate(在SampleCodeAppDelegate : NSObject <UIApplicationDelegate>)和其他ViewContrller中声明的委托之间有什么区别。

1 个答案:

答案 0 :(得分:2)

我正在尝试pushViewController和modalViewController无法呈现其他视图。

<强>答案: 如果您无法在相机覆盖屏幕后显示其他视图,那么我认为您需要通过使用performSelectorOnMainThread在主线程上执行操作来显示其他视图

[self performSelectorOnMainThread:@selector(showOtherView) withObject:OtherViewControllerObj waitUntilDone:YES];

并且在showOtherView选择器方法中首先需要确认是否应该在navigationconroll中推送viewconroller,如果已经推送了那么你应该尝试使用presentModalViewController来显示otherview,如下面的代码。

-(void)showOtherView{

[self.navigationController pushViewController:OtherViewControllerObj animated:YES];

[self presentModalViewController:OtherViewControllerObj animated:YES]; 

}

我认为这应该有用。