답변:
다음과 같이 대리인에게 액세스 할 수 있습니다.
MainClass *appDelegate = (MainClass *)[[UIApplication sharedApplication] delegate];
교체 MainClass를 응용 프로그램 클래스의 이름으로.
그런 다음 다른 뷰 컨트롤러에 대한 속성이 있으면 다음과 같이 호출 할 수 있습니다.
[appDelegate.viewController someMethod];
그리고 누군가가 이것을하는 방법을 궁금해한다면 swift
:
if let myDelegate = UIApplication.sharedApplication().delegate as? AppDelegate {
myDelegate.someMethod()
}
nil
무엇입니까? 앱에 항상 AppDelegate가 없습니까?!
sharedApplication()
로 교체해야합니다 shared
. 즉, "응용 프로그램"과 괄호를 제거하십시오. 따라서 Swift 5.2의 전체 작업 코드는 다음과 같습니다. if let myDelegate = UIApplication.shared.delegate as? AppDelegate { myDelegate.someMethod() }
UINavigationController
설정이 필요한 것 같 습니까?
당신은 AppDelegate
통해 프로그램 의 아무 곳이나 얻을 수 있습니다
YourAppDelegateName* blah = (YourAppDelegateName*)[[UIApplication sharedApplication]delegate];
앱 델리게이트에서는 IB 또는 코드를 통해 내비게이션 컨트롤러를 설정해야합니다.
코드에서 '하우스 개요'뷰 컨트롤러를 이미 만들었다 고 가정하면 다음과 같습니다 AppDelegate
didFinishLaunchingWithOptions
.
self.m_window = [[[UIWindow alloc]initWithFrame:[[UIScreen mainScreen]bounds] autorelease];
self.m_navigationController = [[[UINavigationController alloc]initWithRootViewController:homeViewController]autorelease];
[m_window addSubview:self.m_navigationController.view];
그런 다음 '실'당 뷰 컨트롤러가 필요하고 버튼 클릭 이벤트가 발생하면 다음을 호출하십시오.
YourAppDelegateName* blah = (YourAppDelegateName*)[[UIApplication sharedApplication]delegate];
[blah.m_navigationController pushViewController:newRoomViewController animated:YES];
위의 코드를 테스트하지 않았으므로 구문 오류를 용서하지만 의사 코드가 도움이되기를 바랍니다.
이것이 내가하는 방법입니다.
[[[UIApplication sharedApplication] delegate] performSelector:@selector(nameofMethod)];
가져 오는 것을 잊지 마십시오.
#import "AppDelegate.h"
다음 단계를 따르십시오
1. 앱 델리게이트 객체를 원하는 클래스에서 앱 델리게이트를 가져옵니다.
#import "YourAppDelegate.h"
2. 클래스 내부에 앱 델리게이트 객체 (기본적으로 싱글 톤)의 인스턴스를 만듭니다.
YourAppDelegate *appDelegate=( YourAppDelegate* )[UIApplication sharedApplication].delegate;
3. 선택기를 사용하여 메소드를 호출하십시오.
if([appDelegate respondsToSelector:@selector(yourMethod)]){
[appDelegate yourMethod];
}
또는 직접
[appDelegate yourMethod];
신속하게
let appdel : AppDelegate = UIApplication.shared.delegate as! AppDelegate
나는 첫 번째를 추천합니다. 실행하고 이동하십시오.
NSObject <UIApplicationDelegate> * universalAppDelegate =
( NSObject <UIApplicationDelegate> * ) [ [ UIApplication sharedApplication ] delegate ];
AppDelegate.h를 어디에나 포함시키지 않아도됩니다. 그것은 먼 길을가는 간단한 캐스트입니다. 독립적 인 Controller를 개발하고 클래스 이름 등에 대해 걱정할 필요없이 다른 곳에서 재사용 할 수 있습니다 ...
즐겨
그리고 watchOS의 뷰 컨트롤러에서 WatchKit 확장 델리게이트에 액세스해야하는 경우 :
extDelegate = WKExtension.sharedExtension().delegate as WKExtensionDelegate?
Swift 3.0 이상 업데이트
//
// Step 1:- Create a method in AppDelegate.swift
//
func someMethodInAppDelegate() {
print("someMethodInAppDelegate called")
}
다음과 같이 컨트롤러에서 위의 메소드를 호출하십시오.
//
// Step 2:- Getting a reference to the AppDelegate & calling the require method...
//
if let appDelegate = UIApplication.shared.delegate as? AppDelegate {
appDelegate.someMethodInAppDelegate()
}
산출:
기술적으로 실현 가능하더라도 좋은 접근 방식은 아닙니다. 다음과 같이 말할 때 : "스플래쉬 화면에는 각 방마다 버튼이있어 걸어서 어느 지점 으로든 이동할 수 있습니다." 그래서 버튼의 tohc 이벤트를 통해 이러한 컨트롤러를 호출하기 위해 appdelegate를 통과 하시겠습니까?
이 방법은 Apple 지침을 따르지 않으며 많은 단점이 있습니다.
2020 년 iOS13, xCode 11.3 Objective-C에서 작동하는 것은 다음과 같습니다.
#import "AppDelegate.h"
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
그것은 나를 위해 일하고 있습니다, 나는 당신에게 똑같이 희망합니다! :디