2016-02-01 4 views
-1

Добавил пользовательский вид, состоящий из кнопок на клавиатуре. Кнопки отображаются правильно, но при нажатии на кнопки вместо клавиш кнопки нажимаются основные клавиши клавиатуры.Пользовательский вид над клавиатурой, не работающей в ios9

UIWindow* tempWindow = [UIApplication sharedApplication].windows.lastObject; 
for (UIView *keyboard in [tempWindow subviews]) { 
    if ([[keyboard description] hasPrefix : @"<UIInputSetContainerView"]) { 
    for(int i = 0 ; i < [keyboard.subviews count] ; i++) 
     { 
     UIView* hostkeyboard = [keyboard.subviews objectAtIndex:i]; 
     if([[hostkeyboard description] hasPrefix:@"<UIInputSetHost"] == YES){ 
      [hostkeyboard addSubview:extraRow]; 
      [hostkeyboard bringSubviewToFront:extraRow]; 
      } 
     } 
    } 
} 

extraRow - UIView, состоящий из кнопок.

Есть что-то не хватает?

+1

Почему вы не используете 'UITextField' и' UITextView' 'inputAccessoryView' или' inputView' свойство? Это кажется неправильным и (как вы обнаружили) легко сломается. Интересно, почему это даже нормально делать. – SmokeDispenser

+0

@JanGreve Хотите иметь представление в виде надписи над клавиатурой и при необходимости удалить, если клавиатура останется нетронутой. Есть ли способ подавить ниже и дать приоритет для вышеуказанного представления? Благодарим за отзыв. – jeff

+0

Клавиатура не считается частью вашего приложения; Я сомневаюсь, что есть способ законно (w.r.t. Яблоки правила) сделать это. – SmokeDispenser

ответ

0

Вы можете просто добавить пользовательский вид на клавиатуру в качестве inputAccessoryView. Тогда просто назначить кнопку правильную цель, которую Вы хотите, чтобы она срабатывала при нажатии на

- (void)textFieldDidBeginEditing:(UITextField *)textField { 

    UIView * theView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 200)]; 
    [theView setBackgroundColor: [UIColor greyColor]]; 

    UITextField * txtTest = [[UITextField alloc] initWithFrame:CGRectMake(0, 5, theView.frame.size.width, 60)]; 
    UIButton * btn = [[UIButton alloc] initWithFrame:CGRectMake(20, 65, 100, 30)]; 

    [btn setTitle:@"Click my Button" forState:UIControlStateNormal]; 
    [btn addTarget:self action:@selector(alert:) forControlEvents:UIControlEventTouchUpInside]; 

    // Just put this to see the items or customize the color 
    [txtTest setBackgroundColor:[UIColor whiteColor]]; 
    [btn setBackgroundColor:[UIColor blueColor]]; 

    // Need this to add it to the view 
    [theView addSubview:txtTest]; 
    [theView addSubview:btn]; 

    textField.inputAccessoryView = theView; 
} 
0

Одна вещь, которую вы, возможно, захотите рассмотреть устанавливает свойство exclusiveTouch в extraRow на YES. Как отказ от ответственности я сам не пробовал этот пример, но я думаю, что проблема, с которой вы сталкиваетесь, связана с представлением, проходящим по событию касания.