danielreiser
danielreiser

Reputation: 5360

UIButton how to remove from UIView?

I've set up a Button and add it to a view. I want to add a "done" button to the UIKeyboardTypeNumberPad. Here's my code.

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

Everything works great until I want to remove the button if I've got a Kayboard of type NumbersAndPunctuation for example.

If I click the button I use [(UIButton)*sender removeFromSuperview]; to prevent memory leaks.

But how do I remove the button from within an other function?

Thanks a lot!

Some other guys did ask that question somewhere else but didn't get a answer. I'am sure you can help :)

Upvotes: 1

Views: 9556

Answers (3)

johndpope
johndpope

Reputation: 5249

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

Upvotes: 7

Morion
Morion

Reputation: 10860

you can declare your button in your .h file, so you will be able to get access from all class methods

Upvotes: 0

Ben Gottlieb
Ben Gottlieb

Reputation: 85532

You should store a reference to the button, instead of using a local variable. For example:

Header file:

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

Implementation file:

doneButton = [UIButton buttonWithType: UIButtonTypeCustom
...

To remove it (assuming you're in the same object:

[doneButton removeFromSuperview];

However, Apple may not take kindly to you adding buttons to their keyboard.

Upvotes: 2

Related Questions