2016-07-29 3 views
1

У меня есть textView и изображениеView, добавленное в раскадровку, как показано на скриншоте ниже.Ios Swift программно меняет порядок просмотра по раскадровке

В повести порядке платы является:

  • textView
  • imageView

Сейчас в беге imageView охватывает textView и вещи, присвоенные textView не работает.

Так что я программно хочу, чтобы изменить порядок:

  • imageView
  • textView

(не касаясь раскадровку)

Я пробовал:

self.view.bringSubviewToFront(textView) 

self.view.sendSubviewToBack(imageView) 

и

imageView.layer.zPosition = 1 
textView.layer.zPosition = 2 

Ни один из них не работает для меня

Story Board View order

+0

Вы пытались сделать изображениеView скрытым, чтобы проверить, находится ли textView в нужном месте? –

+0

Да, в правильном месте, я пробовал все это. Если я изменяю порядок в раскадровке, он работает, но не способен делать программно. –

+0

Вы можете указать, где вы используете код? 'self.view.bringSubviewToFront (textView) self.view.sendSubviewToBack (imageView)' –

ответ

1

Я думаю, проблема в том, вы можете использовать эти коды в viewDidLoad методе. Попробуйте использовать в viewDidAppear

Или другой попытка использует performSelector

написать в viewDidLoad или viewWillAppear

self.performSelector(#selector(changeOrder), withObject: nil, afterDelay: 0.2) 

и написать ваш заказ изменения в этой функции

func changeOrder() { 
    imageView.layer.zPosition = 1 
    textView.layer.zPosition = 2 
} 

Редактировать

Я сделал образец. Взгляни.
https://github.com/RajanMaheshwari/OrderingLayer

Я попробовал код и его работает отлично

class ViewController: UIViewController { 

@IBOutlet weak var myImageView: UIImageView! 
@IBOutlet weak var myTextField: UITextField! 
override func viewDidLoad() { 
    super.viewDidLoad() 

    self.performSelector(#selector(changeOrder), withObject: nil, afterDelay: 0.2) 
} 

    func changeOrder() { 

     myImageView.layer.zPosition = 1 
     myTextField.layer.zPosition = 2 
    } 
} 

Мои раскадровки

enter image description here

Мой Конечный результат после выполнения кода

enter image description here

Теперь imageView находится на слое 1 и textField находится на уровне 2 позиции

Если вы закомментировать performSelector линию, то результат будет

enter image description here

Здесь imageView на слой 2 позиции и textField находится в положении 1-го уровня.

+0

viewDidLoad или viewWillAppear не будет отличаться от viewDidLoad для этого кода –

+0

@MohsenShakiba Тогда вы можете попробовать 'viewDidAppear'. Точка не указана или не появится, точка - это селектор выполнения, который динамически вызывается во время выполнения. –

+0

@MohsenShakiba. См. Это для более подробной информации. Http: //stackoverflow.com/questions/7445337/difference-between-self-methodname-and- self-performselectorselectormethod И это работает для меня. –

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