2009-05-05 4 views
1

저는보기 컨트롤러 클래스가 있습니다. 가속도계가 움직임을 감지하고 가속도계 : didAccelerate : 대리자 객체를 호출 할 때 제 견해에서 어떤 것을하고 싶습니다.가속시 뷰 컨트롤러에서 뷰 변경 작업을 아웃소싱 할 수 있습니까?

위임 개체가 내 뇌에서 문제입니다. 현재, 내 두뇌가 얼어 버리고 나는 더 나은 것이 무엇인지 알지 못한다. 당신이 무슨 생각을하는지 제게 알려주세요!

해결책 1) 내보기 컨트롤러 클래스에서 나는 UIAccelerometerDelegate 프로토콜을 준수하고 가속도계 : didAccelerate : 메서드를 구현합니다. 내 AppDelegate 클래스의 -applicationDidFinishLaunching : 메서드에서 가속시 메서드 호출을 받기위한 뷰 컨트롤러 객체를 위임자로 설정했습니다. 나는 그것이 정말로 좋지 않다고 생각한다. 나는 같이 해당 뷰 컨트롤러 객체를 설정 내 AppDelegate에 클래스의 방법 didAccelerate : : 방법과 -applicationDidFinishLaunching에서

내가 AccelerationDelegate라는 빈 새 개체를 만드는 2) 솔루션, 그 가속도계를 구현하고, 그 UIAccelerometerDelegate 프로토콜을 준수 가속시 메서드 호출을 받기위한 위임.

그러나 해결책 2를 위해 나의 두뇌는 조금 붙이게되었다! 해당 뷰 객체 내의 뷰 컨트롤러에서 뷰 객체에 어떻게 액세스합니까?

여기서 문제는 주변에 하나 이상의보기 컨트롤러가 있다는 것입니다. 나는 그들 사이를 전환하는 탭 막대 컨트롤러를 사용합니다.

어떻게하면 좋을지 제안 할 수 있습니까?

답변

1

가속화가 하나의보기 컨트롤러에만 해당되는 경우보기 컨트롤러가 자체 하위보기를 변경하는 데 필요한 정보를 수신하도록하는 것이 좋습니다. 그러나보기가 표시되면보기 컨트롤러를 대리자로 설정하고 표시되지 않을 때 대리자를 null로 설정하는 것이 좋습니다. (구체적으로 - (void) viewWillAppear:- (void) viewWillDisappear:)

+0

사라진 힌트에 감사드립니다! – Thanks

+0

위임자 공개에 대한 훌륭한 정보. 나는 그것에 대해 생각조차하지 못했지만 .Net 세상에서 항상하는 일이기 때문에해야만합니다. 감사! –

2

두 번째 방법이 더 좋습니다. 현재 선택된 탭보기 또는 앱의 특정보기에만 액세스하려고합니다. 어떤 경우

가, 내가 무엇을 할 것이라고하는 대리자에서 액세스 할 수 있도록 UIApplicationDelegateUITabViewController에 대한 속성을 설정하는 것입니다 (당신은 [[UIApplication sharedApplication] delegate]를 호출하여 응용 프로그램 대리자를 얻을 수 있습니다). 예 :

YourApplicationDelegate *appDelegate = (YourApplicationDelegate *)[[UIApplication sharedApplication] delegate]; 
FirstUIViewController *firstViewController = appDelegate.firstViewController; 
[firstViewController doStuff]; 

여기에서 firstViewController은 대리인의 자산입니다.

+0

감사합니다. UIScrollView 내부의 뷰 (특정 : UIImageView 개체)에 액세스하려고합니다. – Thanks

관련 문제