微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ios – UIInputViewAudioFeedback协议的问题(enableInputClicksWhenVisible未调用)

我的自定义键盘和播放“咔嗒”声音有些问题.我正在使用以下课程和定义.

KeyboardShotInputView.h

#import <UIKit/UIKit.h>

//------------------------------------------------------------------------------
// Protocol defintion
//------------------------------------------------------------------------------

@protocol KeyboardShotInputDelegate

- (void)shotButtonDidTouchDown:(Nsstring*)value;
- (void)deleteButtonDidTouchDown;

@end

//------------------------------------------------------------------------------
// Interface defintition
//------------------------------------------------------------------------------

@interface KeyboardShotInputView : UIView <UIInputViewAudioFeedback>

@property (nonatomic,strong) id <KeyboardShotInputDelegate> delegate;
@property (strong,nonatomic) IBOutlet UIView *keyboard;
@property (strong,nonatomic) IBOutletCollection(UIButton) NSArray *shotButtonCollection;
@property (weak,nonatomic) IBOutlet UIButton *deleteButton;

- (UIView *) getKeyboardView;
- (IBAction)shotButtonpressed:(id)sender;
- (IBAction)deleteButtonpressed:(id)sender;
@end

KeyboardShotInputView.m

#import "KeyboardShotInputView.h"

@implementation KeyboardShotInputView

@synthesize keyboard;
@synthesize shotButtonCollection;
@synthesize deleteButton;

//------------------------------------------------------------------------------

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];

    if (self) {
        [self loadInputView];
    }        
    return self;
}

//------------------------------------------------------------------------------

- (id)initWithCoder:(NSCoder *)coder
{
    self = [super initWithCoder:coder];

    if (self) {
        [self loadInputView];
    }
    return self;
}

//------------------------------------------------------------------------------

- (void)loadInputView
{
    // load nib file
    UINib *inputViewNib = [UINib nibWithNibName:@"KeyboardShotInput" bundle:nil];
    [inputViewNib instantiateWithOwner:self options:nil];

    // layout shot input buttons
    for (UIButton *btn in shotButtonCollection) {
        //[btn.layer setBorderWidth:1.0];
        [btn.layer setCornerRadius:5.0];
        [btn.layer setShadowColor:[UIColor blackColor].CGColor];
        [btn.layer setShadowOpacity:0.9];
        [btn.layer setShadowRadius:1.0];
        [btn.layer setShadowOffset:CGSizeMake(0.0,1.0)];
    }

    // layout delete button
    [self.deleteButton.layer setBorderWidth:1.0];
    [self.deleteButton.layer setCornerRadius:5.0];
    [self.deleteButton.layer setCornerRadius:5.0];
    [self.deleteButton.layer setShadowColor:[UIColor blackColor].CGColor];
    [self.deleteButton.layer setShadowOpacity:0.9];
    [self.deleteButton.layer setShadowRadius:1.0];
    [self.deleteButton.layer setShadowOffset:CGSizeMake(0.0,1.0)];
}

//------------------------------------------------------------------------------

/**
 * Enable input clicks.
 */
- (BOOL) enableInputClicksWhenVisible
{
    NSLog(@"enableInputClicksWhenVisible: YES");
    return YES;
}

//------------------------------------------------------------------------------

/**
 * Return Keyboard object.
 *
 * @return UIView of the keyboard.
 */
- (UIView *) getKeyboardView;
{
    return self.keyboard;
}

//------------------------------------------------------------------------------

/**
 * Any of the shot button is pressed.
 *
 * @param sender Shot button object.
 */
- (IBAction)shotButtonpressed:(id)sender
{
    if (!self.delegate) return;

    // play click
    NSLog(@"shotButtonpressed: playInputClick");
    [[UIDevice currentDevice] playInputClick];

    [self.delegate shotButtonDidTouchDown:[(UIButton *)sender currentTitle]];
}

//------------------------------------------------------------------------------

/**
 * The delete button is pressed.
 *
 * @param sender DEL button object.
 */
- (IBAction)deleteButtonpressed:(id)sender
{
    if (!self.delegate) return;

    // play click
    NSLog(@"deleteButtonpressed: playInputClick");
    [[UIDevice currentDevice] playInputClick];
    [self.delegate deleteButtonDidTouchDown];
}

@end

EditShootingResultTableViewController.m

- (void)viewDidLoad
{
    [super viewDidLoad];

    // connect keyboard toolbar
    self.keyboardToolbar = [[KeyboardToolbar alloc] init];
    self.keyboardToolbar.delegate = self;

    // connect shot input keyboard    
    self.keyboardShotInputView = [[KeyboardShotInputView alloc] init];
    self.keyboardShotInputView.delegate = self;

    for (UITextField* tf in self.tfShotCollection) {
        tf.inputView = [self.keyboardShotInputView getKeyboardView];
    }

    //...
}

//------------------------------------------------------------------------------
// @name KeyboardShotInputDelegates

/**
 * Receive a message every time the user touches any shot input button.
 */
- (void)shotButtonDidTouchDown:(Nsstring *)value
{
   // handle keyboard event here...
}

//------------------------------------------------------------------------------

/**
 * Receive a message every time the user touches the shot delete button.
 */
- (void)deleteButtonDidTouchDown
{
     // handle keyboard event here...
}

一切都很好.即使是键盘代表的召唤.我从方法enableInputClicksWhenVisible获得除NSLog之外的所有NSLog输出.有谁知道出了什么问题?几天后我找不到任何解决方案.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐