2009-07-19 2 views
0

Я использую трюк, чтобы поместить пользовательскую кнопку для цифровой клавиатуры.Кнопка не удалена с удаленнымFromSuperVire

Но я не могу удалить кнопку после ее использования, поэтому на обычной клавиатуре появляются сверху.

Это, как я добавить его:

- (void)keyboardShow:(NSValue *)v 
{ 
    if (isKeyboardNumeric) { 
     // create custom button 
     UIButton *doneButton = [[UIButton alloc] init]; 
     //doneButton.buttonType = UIButtonTypeCustom; 
     doneButton.frame = CGRectMake(0, 163, 106, 53); 
     doneButton.adjustsImageWhenHighlighted = NO; 
     if ([[[UIDevice currentDevice] systemVersion] hasPrefix:@"3"]) { 
      [doneButton setImage:[UIImage imageNamed:@"DoneUp3.png"] forState:UIControlStateNormal]; 
      [doneButton setImage:[UIImage imageNamed:@"DoneDown3.png"] forState:UIControlStateHighlighted]; 
     } else {   
      [doneButton setImage:[UIImage imageNamed:@"DoneUp.png"] forState:UIControlStateNormal]; 
      [doneButton setImage:[UIImage imageNamed:@"DoneDown.png"] forState:UIControlStateHighlighted]; 
     } 
     [doneButton addTarget:self action:@selector(dismissKeyboard:) forControlEvents:UIControlEventTouchUpInside]; 
     doneButton.tag = 99; 
     // locate keyboard view 
     UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1]; 
     UIView* keyboard; 
     for(int i=0; i<[tempWindow.subviews count]; i++) { 
      keyboard = [tempWindow.subviews objectAtIndex:i]; 
      // keyboard view found; add the custom button to it 
      if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES) 
       [keyboard addSubview:doneButton]; 
     } 
    } 
} 

И это, как я удалить его:

- (void)keyboardHide 
{ 
    UIView *btn; 
    UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1]; 
    UIView* keyboard; 
    for(int i=0; i<[tempWindow.subviews count]; i++) { 
     keyboard = [tempWindow.subviews objectAtIndex:i]; 
     // keyboard view found; add the custom button to it 
     if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES) { 
      for (btn in keyboard.subviews) { 
       if (btn.tag==99) { 
        [btn removeFromSuperview]; 
        [btn release]; 
        break; 
       } 
      } 
     } 
    } 
    [self setupButtons]; 
} 

Оба метода вызываются правильно, и в отладчике я подтверждаю, что называется

[btn removeFromSuperview] 

Но в любом случае кнопка остается.

Я пытаюсь поместить код, чтобы удалить его непосредственно перед вызовом if (isKeyboardNumeric), но ничего.

ответ

4

Это именно то, что Apple советует вам не делать этого, и ясно, что вы это знаете, потому что вы пытаетесь охранять себя, проверяя версии ОС и т. Д. Это супер хрупкое, вполне возможно, что это будет изменение внутри незначительных обновлений или исправлений. В 2.x Apple добавила и модифицировала несколько клавиатур.

Не факт, что вы не можете получить разумное поведение, не удивительно, кто знает, что делает Apple в представлении клавиатуры, они могут быть перетаскиванием или выполнять кэширование пользовательского чертежа с экрана изображения, чтобы увеличить эффективность рисования.

Если вы хотите это сделать, вы должны реализовать свою собственную цифровую клавиатуру и вставлять ее туда и обратно, когда вам это нужно. Вероятно, это не тот ответ, который вы хотите услышать, но, скорее всего, это будет намного проще, чем взломать ваши взгляды, и намного реже вызовет проблемы для ваших пользователей.

+0

Хорошо, это справедливо. Я изменяю способ работы пользовательского интерфейса и удаляю хак для использования панели инструментов на верхней панели клавиатуры и использования этого представления. Я помещал кнопки в окно навигации. Я надеюсь, что бета-плеер понравится больше;) – mamcx

Смежные вопросы