2015-01-01 3 views
1

제가 작성한 클래스에서 AlertController를 표시하려고합니다. AlertController 이후 는 UIResponder의 서브 클래스 내가 엑스 코드 나에게사용자 정의 클래스에서 alertController를 보여줍니다.

superclass?.presentViewController(alertController, animated: true, completion: nil) 

을 제안한다 다음 코드 줄을 사용하고 있습니다하지만 AnyClass 때문에 컴파일 할 수있다? 어떤 presentViewController 멤버도 없습니다. 내 클래스는 NSObject의 하위 클래스입니다.

다른 해결책이 있습니까? 감사합니다.

+0

'presentViewController'하지 내가 아는 NSObject' – Krumelur

+0

@Krumelur'의, UIViewController''하는 방법입니다,하지만 난 노력하고있어 내 수업에서 UIAlertController를 보여줄 수 있습니다. 다른 해결 방법이 있습니까? – Nicholas

답변

1

문제는 "시작"에 대한 이해입니다. 인터페이스의 일부보기 앞에 경고가 나타납니다. 따라서, 우리는 무엇을 알아야합니까?보기. 그 대답은 다음과 같습니다 : 일부보기 제어기의 기본보기 - 기본보기가 인터페이스에있는보기 제어기.

따라서 인터페이스에 기본보기가있는보기 컨트롤러 만 경고를 표시하도록 지시 할 수 있습니다. 당신이 "from"을 보여줘야 만하는 것은 뷰 컨트롤러입니다.

코드가 어디에서나 해당보기 컨트롤러에 대한 참조를 가져와 코드가보기 컨트롤러가 경고를 표시 할 수 있도록해야합니다. 그것은 그 자체로 흥미로운 문제가 될 수 있습니다. 사실, 기존 객체에 대한 "참조"는 코코아 프로그래밍 기술의 주요 부분입니다. 설정 유

class func getAlertViewConroller(globleAlert:UIViewController,DialogTitle:NSString,strDialogMessege:NSString){ 


    let actionSheetController: UIAlertController = UIAlertController(title: DialogTitle, message: strDialogMessege, preferredStyle: .Alert) 


    let nextAction: UIAlertAction = UIAlertAction(title: "OK", style: .Default) { action -> Void in 

    } 
    actionSheetController.addAction(nextAction) 

    globleAlert.presentViewController(actionSheetController, animated: true, completion:nil) 

} 

같은 방법을 정의 할 필요 NSObject.In 설정 클래스의 서브 클래스 U 컨트롤러 참조, 메시지 전달이 UR 뷰 컨트롤러, 타이틀 등

Settings.getAlertViewConroller(self, DialogTitle: "Test Sale", strDialogMessege: "You are performing a test sale. This is not a real transaction.") 

가입일

+0

내 책의 일부를 그 책에 쓰는 것이 중요한 문제입니다 ("참조하기") : http://www.apeth.com/iOSBook/ch13.html#_instance_visibility 그것은 당신에게 몇 가지 아이디어를 줄 것입니다. – matt

+0

Genius! init 메소드에 UIViewController를 포함 시켜라. 끝난. – Nicholas

1

즉, UIAlertController를 표시합니다.

5

이제 최상위보기 컨트롤러를 찾고 alertcontroller을 제시하면됩니다.

UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController; 

while (topController.presentedViewController) { 
    topController = topController.presentedViewController; 
} 
[topController presentViewController:alertController animated:YES completion:nil]; 

credits

참고 :이 코드의 목적-C 버전입니다. 적절하게 신속하게 변환하십시오.

SWIFT

let topController = UIApplication.sharedApplication().keyWindow!.rootViewController as UIViewController 

while (topController.presentedViewController) { 
    topController = topController.presentedViewController; 
} 
topController.presentViewController(alertController, animated:true, completion:nil) 
+0

미안하지만 신속하게 요청했고 Obj C와는 무엇을 해야할지 모르겠습니다. 신속한 언어를 사용하여 수정 해보십시오. – Nicholas

+0

수정 됨! 친절히 확인하십시오. –

0

최신 스위프트 :

var topController:UIViewController = UIApplication.shared.keyWindow!.rootViewController! 
    while ((topController.presentedViewController) != nil) { 
     topController = topController.presentedViewController!; 
    } 
    topController.present(alertController, animated:true, completion:nil)