2011-07-29 5 views
5

필자는 UITextField 설정을위한 inputAccessoryView를 필요로합니다 (Apple의 KeyboardAccessory 예제와 정확히 같은 방식으로).머리를 돌려 놓을 수 없다 - (void) playInputClick;

나는 playInputClick 함수를 사용하여 눌렀을 때 클릭하기 위해 버튼을 얻으려고하지만 어떻게 작동하지 못합니다. Apple documentation은보기에 대리자 메서드를 추가해야하지만보기가 인터페이스 작성기에서만 작성되므로이 작업을 수행 할 수있는 방법이 표시되지 않는다고 말합니다.

누구나이 작업을 수행하는 방법을 알고 있습니까? 이 방법의 예제 코드는 인터넷 어디에서나 사용되는 것으로 보입니다.

+0

현재 클래스의 서브 클래스로 변경하고 사용자 정의 클래스 – bshirley

답변

-2

보기 컨트롤러 클래스를 구현하고 인터페이스 빌더에 files'owner를이 클래스로 지정해야합니다. 보기 컨트롤러의보기를보기에 연결하십시오.

일단 작업을 완료하면보기 컨트롤러에서 대리인을 구현할 수 있습니다. 매우 간단하고 솔직합니다. 기본적으로 뷰는 뷰 컨트롤러 클래스의 멤버가됩니다.

+0

에서 프로토콜을 구현해야합니다. Apple docs에서 'UIView의 사용자 정의 하위 클래스에이 프로토콜 구현'. 그래서 그게 잘못 됐어, 실제로 UIViewController 하위 클래스에서 대신 구현 될 예정인가? –

+0

uiview에서 파생 된 사용자 정의 클래스를 생성 할 수도 있습니다. 기본적으로 동일합니다. –

+1

좋아,이 해봤습니다. 프로토콜 및 위임 메소드를 구현하는 CustomKeyboardController 클래스를 작성했으며 inputAccessoryView는 customKeyboardController.view로 설정되었습니다. 버튼을 누르면 소리가 나지 않습니다. 내가 디버그 출력을 볼 수있는 옆에 NSLog 문을 가지고 있으므로 [[UIDevice currentDevice] playInputClick] 메서드가 실행되고 있음을 압니다. 소리가 들리지 않는다는 것입니다. –

4

나는 동일한 문제를 겪어 왔고 마침내 알아 냈습니다.

UIViewController에서 프로토콜을 구현하면 작동하지 않습니다. 그것은 UIView 하위 클래스에서 구현해야합니다.

그래서 나는 인터페이스 빌더에서보기 컨트롤러를 사용하여보기를 만들었습니다. 그런 다음 UIView의 하위 클래스 인 다른 클래스를 추가했습니다. 이 클래스는 UIInputViewAudioFeedback 프로토콜을 구현합니다. 그런 다음 인터페이스 빌더에서 필자의 뷰의 Identity 관리자로 가서 클래스를 UIInputViewAudioFeedback 프로토콜을 구현하는 UIView 하위 클래스로 변경했습니다. 키보드 클릭 소리가 작동 중입니다.

내보기 컨트롤러는 여전히 [[UIDevice currentDevice] playInputClick]을 호출합니다. UIInputViewAudioFeedback 프로토콜의 코드를 UIView Subclass로 옮기고 UIView 서브 클래스로 뷰 클래스를 설정해야합니다.

+0

가장 유용한 답변을 제공해 주셔서 감사합니다. 기본적으로이 방법은 표준보기의 단추에 클릭을 추가하는 데 쓸모가 없습니다. 그것들 모두는 서브 클래스 화되어야한다. –

+0

@ YiminRong은 뷰 컨트롤러의 뷰를 하위 클래스로 변경했습니다. – dimpiax

+0

"collectionViewCell from playInputClick"을 선택해 본 경험을 제공하십시오. UICollectionViewCell 서브 클래스에서 UIInputViewAudioFeedback 프로토콜을 구현하면 작동하지 않습니다. 그것은 UICollectionView 서브 클래스에서 구현되어야합니다. – denkeni

4

당신이 inputAccessoryView에서이 작업을 수행하려고하는 가정 :의 .h 파일에서

당신의 .m 파일에서 UIInputViewAudioFeedback

@interface YourAcessoryView : UIView <UIInputViewAudioFeedback> 

을 구현하는 프로토콜을 만족시키기 위해이 방법을 추가 할 것을 나타냅니다

- (BOOL)enableInputClicksWhenVisible { 
    return YES; 
} 

버튼을 누르면 다음과 같이하십시오.

- (void)buttonPressed:(UIButton*)sender 
{ 
    [[UIDevice currentDevice] playInputClick]; 
    // do more stuff 
} 
관련 문제