2012-11-26 3 views
4

OSX (Mountain Lion) 용 화면 보호기에서 작업 중이며 구성 시트를 설정하는 데 문제가 있습니다 (시스템 환경 설정에서 "화면 보호기 옵션 ..."을 클릭하면 옵션이 나타납니다). 인터넷상에서 OSX 화면 보호기를 작성하는 데는 2 ~ 3 개의 자습서 만있는 것으로 보이며 몇 년 전이므로 자료가 OSX 10.8 및 Xcode 4로 변환되지 않습니다.OSX 화면 보호기 구성 시트를 설정하는 방법은 무엇입니까?

우선, 내 ScreenSaverView.m 파일에, 내가 가진 :

- (BOOL)hasConfigureSheet 
{ 
    return NO; 
} 

- (NSWindow*)configureSheet 
{ 
    return nil; 
} 

... 그리고 아직, 시스템 환경 설정에서 "화면 보호기 옵션 ..."버튼 (아무것도 그것을 클릭 할 때 발생 없음)보다는 같이 사용할 여전히 클릭 할 수 "Arabesque"화면 보호기.

단추를 클릭했을 때 구성 시트가 ​​나타나는 단계는 무엇이며 단추가 현재 비활성화되어 있지 않은 이유는 무엇입니까?


편집 : "화면 보호기 옵션 ..."버튼이 비활성화되지 않은 이유를 깨달았

. 을 ScreenSaverView.h 파일에 포함하는 것을 잊었습니다. 그러나 구성 시트를 표시하는 방법에 대한 나의 질문은 여전히 ​​남아 있습니다.

답변

5

첫 번째 사항 먼저 프로젝트에 ScreenSaver.framework을 포함해야합니다. 필요한 클래스 인 ScreenSaverViewScreenSaverDefaults을 제공합니다.

당신은 이미 ScreenSaverView.m이라는 파일이 있다고합니다. "화면 보호기 옵션 ..."단추를 비활성화하려면 -hasConfigureSheet 메서드를 내 보내야한다고 말하는 사람과 함께하십시오. 이것은 당신이해야했듯이 ScreenSaverView을 서브 클래 싱했는지 궁금하게 만든다. (NSObject 대신 서브 클래스를 만들었습니까?) ScreenSaverView-hasConfigureSheet과 같은 메서드를 내 보냅니다. 서브 클래 싱을 실시해, 거기에 적절한 메소드를 오버라이드 (override) 할 필요가 있습니다.

몇 가지 더 :

당신은 당신의 구성 시트의 UI가 포함 된 프로젝트에서 XIB 파일을 포함해야하고, 당신이 패널을 참조하도록 하위 클래스에 '인터페이스를 IBOutlet의를 제공하고해야

포함 된 UI 요소 (실제로 콘센트가 필요한 요소).

마지막으로이 유사한 방식으로 구성 시트 가져 오기해야 당신의 -configureSheet 방법 (당신의 IBOutlet의의 예는, configSheet가 될 것이다 일) :

if (configSheet == nil) 
{ 
    if ([NSBundle loadNibNamed:@"myConfigSheet" owner:self] == NO) 
    { 
     NSLog(@"load config sheet failed"); 
    } 
} 

// then retrieve your defaults and set up your sheet; you should 
// be working with ScreenSaverDefaults, a subclass of NSUserDefaults. 

// then return 'configSheet' 

편집 :

만약 내가 이미 알고있는 것을 말하려고한다면 사과를하십시오. 그러나 configSheet에 어려움을 겪고 있다고 말했 읍니다. 그래서 나는 모든 기지를 다루고 있습니다.My_ScreensaverView.h에서

, 당신의 패널 출구를 선언 : 나는 당신이 실제로 시트에 사용하는 어떤 클래스 모르는 간단하기 때문에, id 대신 NSWindow * 또는 NSPanel *을 사용

IBOutlet id configSheet; 

참고. 이상적으로는 시트에 NSPanel을 사용해야합니다.

nib 파일에서 File's OwnerMy_ScreensaverView 인 인스턴스인지 확인하십시오. 이 객체의 아이콘을 선택한 다음 ID 속성을 사용하여 클래스를 지정할 수 있습니다.

configSheet 콘센트와 패널을 연결하십시오. 이 작업을 수행하는 한 가지 방법은 File's Owner 개체에서 창 또는 패널 아이콘으로 드래그하는 동안 Ctrl 키를 누른 상태로 나타나는 팝업에서 configSheet을 선택하는 것입니다.

언제나처럼 행운을 빈다.

+0

저는 실제로 내 프로젝트에'ScreenSaver.framework'을 가지고 있고'ScreenSaverView'를'My_ScreensaverView'로 서브 클래 싱하려고합니다. 혼란을 드려 죄송합니다. 내 문제는'.xib' 파일에'My_ScreensaverView.h'의'configSheet'를 어떻게 연결하는지 모른다는 것입니다. – JacobEvelyn

+0

@ ConstableJoe 몇 가지 추가 정보를 제공했습니다. – trudyscousin

+0

당신에게 무엇을 말해야할지 모르겠습니다. 거의 동일한 코드를 가지고 있었지만'IBOutlet id configSheet'를'.xib' 파일 자체에 링크하는 법을 모르겠습니다. 나는 보통'.xib '내의 엘리먼트를 ctrl-click하고 그것을 헤더 파일의'IBOutlet id configSheet'로 드래그한다고 믿지만 그것은 나를 위해 작동하지 않는다. 말이 돼? Xcode 4에서 사용할 수 있습니까? – JacobEvelyn

관련 문제