2010-01-13 2 views
1

Я установил кнопку и добавлю ее в представление. Я хочу добавить кнопку «done» в UIKeyboardTypeNumberPad. Вот мой код.UIButton как удалить из UIView?

UIButton *doneButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    doneButton.frame = CGRectMake(0, 163, 106, 53); 
    doneButton.adjustsImageWhenHighlighted = NO; 
    [doneButton setImage:[UIImage imageNamed:@"DoneUp.png"] forState:UIControlStateNormal]; 
    [doneButton setImage:[UIImage imageNamed:@"DoneDown.png"] forState:UIControlStateHighlighted]; 
    [doneButton addTarget:self action:@selector(doneButton:) forControlEvents:UIControlEventTouchUpInside]; 

    // 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]; 
    } 

Все прекрасно работает, пока я не хочу, чтобы удалить кнопку, если у меня есть Kayboard типа NumbersAndPunctuation, например.

Если я нажму кнопку, я использую [(UIButton)*sender removeFromSuperview]; , чтобы предотвратить утечку памяти.

Но как удалить кнопку из другой функции?

Большое спасибо!

Некоторые другие парни задали этот вопрос где-то в другом месте, но не получили ответа. Я уверен, что вы можете помочь :)

ответ

2

Вы должны сохранить ссылку на кнопку, вместо локальной переменной. Например:

Заголовок файла: Файл

@interface myObject : NSObject { 
    UIButton *doneButton; 
    ... 

Реализация:

doneButton = [UIButton buttonWithType: UIButtonTypeCustom 
... 

Чтобы удалить его (если вы в одном объекте:

[doneButton removeFromSuperview]; 

Однако Apple может не приветствовать вас, добавляя кнопки на клавиатуру.

+0

Спасибо, я уже попробовал, что без успеха. Вся моя клавиатура удаляется ... Некоторые другие разработчики успешно отправили приложения с дополнительными кнопками :) Надеюсь, что мой тоже принят. – rdesign

+0

Я использовал это, но когда я прикасаюсь к другой клавиатуре, кнопка «done» все еще там – user1561904

0

вы можете объявить кнопку в вашем .h файла, так что вы будете иметь возможность получить доступ из всех методов класса

+0

благодаря вам, но я уже пробовал это. Меня это смущает, но он удалил всю клавиатуру ... – rdesign

+0

вы оба были правы. Я создал новое приложение. Я закодировал его с нуля, и это сработало. ... сбивает с толку. большое спасибо! – rdesign

7
// Where self is a UIView subclass 
NSLog(@"subviews: %@",self.subviews); 
for(id view in self.subviews){ 
    if ([view isKindOfClass:[UIButton class]]) { 
     NSLog(@"Removing a button!"); 
     [view removeFromSuperview]; 
    } 
}