2012-09-13 2 views
0

아이폰에서 popover를 표시하기 위해 사용하는 사용자 정의 UIView가 있습니다. Popover에는 ViewController의 클래스 (UIView의 클래스는 아니지만 UIView를 보여주는 뷰)에서 메서드를 호출해야하는 UIButton이 있습니다.iOS Subclassed UIView - UIButton ViewController에서 메서드 호출하는 방법?

제대로 설정하는 방법은 무엇입니까? 사용자 정의 UIView의 클래스에있는

UIView의 버튼 코드 :이 작업을 수행하는

UIButton *logoutButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [logoutButton setTitle:@"Logout" forState:UIControlStateNormal]; 
    [logoutButton setFrame:CGRectMake(0, 0, content.frame.size.width, 44)]; 
    [logoutButton addTarget:self.superview.superview action:@selector(logout) forControlEvents:UIControlEventTouchUpInside]; 
    [logoutButton setBackgroundImage:redImage forState:UIControlStateNormal]; 
    [logoutButton setBackgroundImage:redImageHighlight forState:UIControlStateHighlighted]; 
    [logoutButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; 
    [content addSubview:logoutButton]; 
+0

뷰는 팝 오버를 제공하는 것과 같은 논 로직을 담당해서는 안됩니다. 버튼의 터치 업 이벤트와 뷰 컨트롤러를 처리하고 거기에서 팝업을 제시해야합니다. – titaniumdecoy

답변

2

가장 좋은 방법은 로그 아웃 버튼을 누를 때 소유자에게 통지하여 UIView 하위에 위임 패턴을 사용하는 것입니다. viewcontroller에서 뷰의 인스턴스를 생성 할 때 delegate를 self로 설정하십시오.

체크 아웃 '작성 사용자 정의 대표'http://enroyed.com/ios/delegation-pattern-in-objective-c-and-writing-custom-delegates/

에서 당신 당신이 위의 코드에서 할 시도한 방식에 수퍼에 연결된의 ViewController에 액세스 할 수 없습니다 수 있습니다.

또는 알림을 게시 할 수 있습니다. 예 : 로그 아웃이 수행되어야한다는 앱 전체 메시지를 보냅니다. NSNotificationCenter에서이를 수행하는 방법을 확인하십시오. 같은

뭔가 :

[[NSNotificationCenter defaultCenter] postNotificationName:kShouldLogOutNotification object:nil]; 

편집 : 당신은 확실히 당신의 사용 사례에 대리자를 사용하는 것이 좋습니다.

+0

기술적으로 실용적이지만 통지는이 문제에 대한 잘못된 해결책입니다. – titaniumdecoy

+0

@titaniumdecoy가 동의 했으므로 참석자들이 갈 길입니다. –

0

좋아, 그래서 사용자 지정 대리자를 만드는 것이이 문제를 처리하는 올바른 방법이라고 생각합니다. (그것이 비록 "올바른"입니다 있는지 확실하지 않습니다) 그러나, 나는

[logoutButton addTarget:self.superview action:@selector(logout) forControlEvents:UIControlEventTouchUpInside]; 

이 그것의 클래스 (의 ViewController)를 사용하는 버튼을 알 것 같다이 방법이 제대로 작동하는지 발견 한 일은 (UIView의) 수퍼입니다. 다시 한 번, 이것이 주 뷰 컨트롤러에서 메서드를 호출하는 올바른/올바른 방법인지는 확실치 않지만 문제없이 작동하므로 유용하다고 판단됩니다.

관련 문제