MusiGenesis
MusiGenesis

Reputation: 75296

How to bring a subview to the front when you tap it?

I have a view with about 30 subviews on it. I want to add code in my subview's viewcontroller so that when I tap the subview, the subview expands to fill the screen.

I'm using [self.view setFrame:rect] to expand the subview, and this works fine. The problem is that some of the other 29 subviews are above the subview that I just tapped, so they're still visible.

I've tried using bringSubviewToFront from the parent viewcontroller, but this appears to have no effect. Is there any code I can put in my subview's viewcontroller class to make this happen?

Upvotes: 64

Views: 69800

Answers (5)

RichApple
RichApple

Reputation: 3

In Objective-C, where

  1. 'self...is a UIView object
  2. 'txtNotes' is a UITextView object...what works for me is:

[self.view.superview bringSubviewToFront: txtNotes];

Upvotes: -2

Rohan Dave
Rohan Dave

Reputation: 261

In Objective-C:

[self.superview bringSubviewToFront: subview];

In Swift 2.3:

self.superview!.bringSubviewToFront(subview)

In Swift 3.1.1 - Swift 4.1:

superview.bringSubview(toFront: subview)

Upvotes: 3

Martin Metselaar
Martin Metselaar

Reputation: 356

For the ease of use an extension in Swift 3

extension UIView {

    func bringToFront() {
        self.superview?.bringSubview(toFront: self)
    }

}

Upvotes: 3

Vikram Biwal
Vikram Biwal

Reputation: 2826

Use this code, even you don't know about superView:

In objective-c:

[subview.superview bringSubviewToFront: subview];

In swift:

subview.superview?.bringSubview(toFront: subview)

Upvotes: 12

seanalltogether
seanalltogether

Reputation: 3552

bringSubviewToFront should work, just make sure you're using it correctly. The usage is.

[parentView bringSubviewToFront:childView];

Upvotes: 171

Related Questions