iOS键盘扩展检测点击

时间:2014-10-20 20:38:34

标签: ios objective-c keyboard

我正在构建自定义键盘并向其添加图像的滚动视图。我试图检测水龙头,但它无法正常工作。有什么建议?我已经尝试在滚动视图中向UIButton添加动作,但没有运气。此代码在滚动视图中显示图像,但它不会检测到点击。代码

  @interface KeyboardViewController (){
    NSMutableArray *_picHolderArray;

    }
    @property (nonatomic, strong) UIButton *nextKeyboardButton;
    @property (nonatomic, strong) UIScrollView *keyboardBackground;
@end

@implementation KeyboardViewController

- (void)updateViewConstraints {
    [super updateViewConstraints];
        // Add custom view sizing constraints here
}

- (void)viewDidLoad {
    [super viewDidLoad];
    self.keyboardBackground.delegate = self;
    // Perform custom UI setup here
    self.nextKeyboardButton = [UIButton buttonWithType:UIButtonTypeSystem];

    [self.nextKeyboardButton setTitle:NSLocalizedString(@"Next Keyboard", @"Title for 'Next Keyboard' button") forState:UIControlStateNormal];
    [self.nextKeyboardButton sizeToFit];
    self.nextKeyboardButton.translatesAutoresizingMaskIntoConstraints = NO;

    [self.nextKeyboardButton addTarget:self action:@selector(advanceToNextInputMode) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:self.nextKeyboardButton];

    NSLayoutConstraint *nextKeyboardButtonLeftSideConstraint = [NSLayoutConstraint constraintWithItem:self.nextKeyboardButton attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0.0];
    NSLayoutConstraint *nextKeyboardButtonBottomConstraint = [NSLayoutConstraint constraintWithItem:self.nextKeyboardButton attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0.0];
    [self.view addConstraints:@[nextKeyboardButtonLeftSideConstraint, nextKeyboardButtonBottomConstraint]];
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
    CGRect frame;

    if(UIDeviceOrientationIsLandscape(orientation))
        frame = CGRectMake(0, 0, 480, 162);
    else
        frame = CGRectMake(0, 0, 320, 216);

    self.keyboardBackground = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, 400, 180)];



    _picHolderArray = [[NSMutableArray alloc]init];
    UIImage* backgroundImage =[[UIImage imageNamed:@"keyBack.jpg"]
                               resizableImageWithCapInsets:UIEdgeInsetsMake(100, 0, 0, 0) ];
    UIGraphicsBeginImageContextWithOptions(self.keyboardBackground.bounds.size, NO, 0.0);
    [backgroundImage drawInRect:self.keyboardBackground.bounds];
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    self.keyboardBackground.backgroundColor = [UIColor colorWithPatternImage:newImage];
    int _x = 0;
    for (int i = 0; i < 5; i++) {
        //load button size and pass in array for titles
        UIImageView *imageView  = [[UIImageView alloc]initWithFrame:CGRectMake(_x,45, 200, 120)];
        imageView.image = [UIImage imageNamed:@"testImage.jpg"];
        [imageView setClipsToBounds:YES];
        UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapGestureCaptured:)];
        [imageView addGestureRecognizer:singleTap];
        [imageView setMultipleTouchEnabled:YES];
        [imageView setUserInteractionEnabled:YES];

        // Create colored border using CALayer property
        [[imageView layer] setBorderColor:
         [[UIColor colorWithRed:(5.0/255.0) green:(108.0/255.0) blue:(182.0/255.0) alpha:1] CGColor]];
        [[imageView layer] setBorderWidth:1.75];
        [_picHolderArray addObject:imageView];

        [self.keyboardBackground addSubview:_picHolderArray[i]];
        _x += imageView.frame.size.width + 60;
    }

    //self.shell.showsHorizontalScrollIndicator = NO;
    self.keyboardBackground.autoresizesSubviews = YES;
   //self.keyboardBackground.pagingEnabled = YES;
    //self.keyboardBackground.scrollEnabled = YES;

    self.keyboardBackground.contentSize = CGSizeMake(_x, 180);


    [self.view addSubview:self.keyboardBackground];
}
- (void)singleTapGestureCaptured:(UITapGestureRecognizer *)gesture
{
    UIView *tappedView = [gesture.view hitTest:[gesture locationInView:gesture.view] withEvent:nil];
    NSLog(@"Touch event on view: %@",[tappedView class]);
}

/**********************************************************************
 *
 * scrollViewDidScroll: allows us to know which camera is viewed.
 *
 **********************************************************************/
#pragma mark - ScrollView Delegates
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    int  _index = ((int)(scrollView.contentOffset.x)/320);
    NSLog(@"%d",_index);
}
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{
    NSLog(@"HEEERE");
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated
}

- (void)textWillChange:(id<UITextInput>)textInput {
    // The app is about to change the document's contents. Perform any preparation here.
}

- (void)textDidChange:(id<UITextInput>)textInput {
    // The app has just changed the document's contents, the document context has been updated.

    UIColor *textColor = nil;
    if (self.textDocumentProxy.keyboardAppearance == UIKeyboardAppearanceDark) {
        textColor = [UIColor whiteColor];
    } else {
        textColor = [UIColor blackColor];
    }
    [self.nextKeyboardButton setTitleColor:textColor forState:UIControlStateNormal];
}

@end

1 个答案:

答案 0 :(得分:0)

如果您运行该目标,则可以看到键盘扩展名的NSLog。

您最有可能将基本应用作为Xcode目标运行。由于您的调试器随后会附加到您的基本应用程序而不是您的扩展程序,因此控制台中将不会显示NSLog。