簡體   English   中英

iOS鍵盤擴展檢測點擊

[英]iOS Keyboard Extension detect tap

我正在構建自定義鍵盤,並向其中添加圖像的滾動視圖。 我正在嘗試檢測水龍頭,但是它不起作用。 有什么建議么? 我試過在滾動視圖中向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

如果運行目標,則可以看到鍵盤擴展的NSLogs。

您最有可能將基本應用程序作為Xcode目標運行。 由於調試器隨后將附加到基本應用程序而不是擴展程序,因此NSLogs將不會在控制台中顯示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM