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
Post a Comment