【问题标题】:iOS Keyboard Extension detect tapiOS 键盘扩展检测点击
【发布时间】:2014-10-21 05:12:12
【问题描述】:

我正在构建一个自定义键盘并向其添加图像的滚动视图。我正在尝试检测水龙头,但它不起作用。有什么建议么?我也尝试在滚动视图中向 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

【问题讨论】:

    标签: ios objective-c keyboard


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多