2010-12-28 6 views
0

3 버튼이있는 UITabBarController을 사용하는 응용 프로그램이 있습니다. 그래서 나는 또한 3 개의 수업을 가지고 있습니다. 내가하고 싶은 일은 클래스 2 (보기 2)의 버튼으로 클래스 1 (보기 1)의 - (IBAction) doSomething: (id) sender {}으로 전화하는 것입니다. 그것은 당신의 doSomething방법 (안 기능)을 수행하고 새로운 클래스에 메소드를 작성하는 데 사용하는 것이 무엇이든다른 클래스 (보기)의 단추가있는 클래스에서 함수 (IBAction) 호출

답변

1

가져 가라. 두 컨트롤러는 클래스를 가져 와서 인스턴스화하고 메서드를 사용할 수 있습니다.

대체로 컨트롤러에 doSomething이있는 경우 알림을 보낼 수 있지만이 방법의 코드가 실제로 두 컨트롤러에 모두 적용되는 경우 두 컨트롤러에 모두 제공하십시오.


한 컨트롤러에서 다른 컨트롤러로 알림을 보낼 수 있습니다. 당신이 버튼을 누르면 코드를 수행하기 위해 클래스 1을 통지 할 때이 같은 통지를 보내드립니다 :

[[NSNotificationCenter defaultCenter] postNotificationName:@"ABCPerformButtonAction" 
               object:nil]; 

당신은 그것을 호출 할 ABCPerformButtonAction이없는, 당신은 단지 당신이거야 문자열이 필요합니다 인식하고있는 것 - 당신의 이니셜이나 앱의 이름 등을 알지 못하기 때문에 ABC를 사용했습니다. 알지 못하는 어떤 알림과 같은 이름의 알림을 우연히 보내지 않도록하기 위해 of) (예 : 사용중인 타사 라이브러리 포함).

알림이 사라지면 @ "ABCPerformButtonAction"을 수신 대기하도록 defaultCenter에 등록 된 모든 개체가 사용자가 선택한 모든 작업을 수행합니다. 여기에 1 레지스터 (이가있는 viewDidLoad 같은 일부 장소 또는 개체의 초기화 방법에 있어야합니다) 방식 컨트롤러 :

[[NSNotificationCenter defaultCenter] addObserver:self 
            selector:@selector(performDoSomething:) 
             name:@"ABCPerformButtonAction" 
             object:nil]; 

가 선택기, performDoSomething :, 당신이 때 실행하려는 방법의 단지 이름입니다 알림이 사라집니다. 이 메서드는 특정 형식을 가져야하므로 doSomething 메서드를 직접 호출 할 수 없습니다.

- (void)performDoSomething:(NSNotification *)notif { 
    [self doSomething]; 
} 

위에서 볼 수있는 것처럼이 방법은 메서드를 호출하는 것입니다. 분명히 훨씬 더 많은 작업을 수행 할 수 있으며 알림과 함께 정보를 보낼 수도 있습니다 (아래 참조).

마지막으로 할당 해제되기 전에 개체를 옵저버로 제거하는 것이 중요합니다. 통지를 수신하기 위해 등록 된 각 객체의 Dealloc 메소드에서 다음을 추가하십시오.

[[NSNotificationCenter defaultCenter] removeObserver:self]; 

바라 건 말하면 의미가 있습니다. Apple documentation for NSNotificationCenter은 더 많은 것을 설명하며 알림을 사용하는 여러 가지 샘플 앱을 제공합니다.

+0

방법 오른쪽 :). 그러나 조금 더 복잡합니다. 설명해 줄게. 두 번째 클래스에서 몇 가지 설정을 nsarray에 저장하고 plist에 저장하는 방법이 있습니다 (버튼을 클릭하면 모든 것이 발생합니다). 다시 두 번째보기에서 첫 번째보기로 전환 할 때 뭔가 직접하지 않고 해당 설정을 사용해야합니다. 그래서 두 번째 클래스의 메소드에 몇 가지 코드를 넣어 첫 번째 클래스에서 설정을 가져 오는 메소드를 호출하려고합니다. – user556541

+0

좋아, 내가 원하는 것을 할 수있는 알림을 보내는 방법에 대한 설명을 추가했습니다. –

+0

시도해 보셨습니까? –

관련 문제