ios - Play keyboard click sound in a collection view controller -


i created subclass of uicollectionviewcontroller used custom inputaccessoryviewcontroller in uitextview. https://developer.apple.com/reference/uikit/uiresponder/1621124-inputaccessoryviewcontroller

i want play keyboard click sound when tap cell in collection view using playinputclick. https://developer.apple.com/reference/uikit/uidevice/1620050-playinputclick

i cannot figure out how work in collection view. works simple view using inputaccessoryview property of uitextview i'm not sure view subclass in collection view controller hierarchy keyboard click sound play.

@interface keyboardclickview : uiview <uiinputviewaudiofeedback> @end  @implementation keyboardclickview - (id)initwithframe:(cgrect)frame {     self = [super initwithframe:frame];     if(self)     {         uitapgesturerecognizer *tap = [[uitapgesturerecognizer alloc] initwithtarget:self action:@selector(tap:)];         [self addgesturerecognizer:tap];     }     return self; }  - (void)tap:(id)sender {     [[uidevice currentdevice] playinputclick]; }  - (bool)enableinputclickswhenvisible {     return yes; } @end  @implementation appdelegate - (bool)application:(uiapplication *)application didfinishlaunchingwithoptions:(nsdictionary *)launchoptions {        _inputaccessoryview = [[keyboardclickview alloc] initwithframe:cgrectmake(0, 0, 0, 50)];     _inputaccessoryview.backgroundcolor = [uicolor redcolor];     [[uitextview appearance] setinputaccessoryview:_inputaccessoryview];      // ... } @end 

i'm aware can play keyboard click sound using audioservicesplaysystemsound(1104) doesn't respect user's settings if have keyboard click sounds disabled.

instead of using uicollectionviewcontroller, define keyboardclickview subclass of uicollectionview , place on uiviewcontroller.

@interface keyboardclickview : uicollectionview <uiinputviewaudiofeedback>  - (id)initwithframe:(cgrect)frame collectionviewlayout:(uicollectionviewlayout *)layout {     self = [super initwithframe:frame collectionviewlayout:layout];      // existing implementation 

the new view controller this:

@interface keyboardclickviewcontroller: uiviewcontroller <uicollectionviewdelegate, uicollectionviewdatasource> @property (nonatomic, strong) keyboardclickview *clickview; @end  @implementation keyboardclickviewcontroller  -(void)viewdidload {     [super viewdidload];      self.clickview = [[keyboardclickview alloc] initwithframe:self.view.bounds collectionviewlayout:[uicollectionviewflowlayout new]];     self.clickview.delegate = self;     self.clickview.datasource = self;     [self.view addsubview:self.clickview]; }  // existing uicollectionviewcontroller logic  @end 

this allows make call playinputclick uiview instead of uiviewcontroller.


Comments

Popular posts from this blog

amazon web services - S3 Pre-signed POST validate file type? -

c# - Check Keyboard Input Winforms -