Swift - Получение подпредставлений

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

class FirstViewController: UIViewController {

     @IBAction func btnAddTask_Click(sender: UIButton){

          var subViews = self.subviews.copy()

    }
 }

Я получаю ошибку:

"FirstViewController" не имеет члена с именем "subviews"

Как я могу получить подпредставления текущего представления?

2 ответа

Решение

UIViewController не имеет subviews имущество. Оно имеет view свойство, которое имеет subviews имущество:

for subview in self.view.subviews {
   // Manipulate the view
}

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

Чтобы создать IBOutletCollectionвыберите все метки, которые вы хотите в IB, и перетащите их в исходный код. Следует спросить, хотите ли вы создать коллекционный массив. (Обратите внимание, что порядок этого массива отсутствует.)

Для поиска всех подпредставлений с вашей точки зрения вы можете использовать этот код:

for subview in self.view.subviews {
   // Use your subview as you want
}

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

myButton.restorationIdentifier = "mySpecialButton";

И после этого вы можете найти свой элемент, используя эту структуру:

for view in view.subviews {
                if (view.restorationIdentifier == "mySpecialButton") {
                    print("I FIND IT");
                    view.removeFromSuperview();
                }
            }

:)

Хакерская элегантность:

  1. Получите позицию щелчка.
  2. Получите представление с помощью hitTest.
  3. Разграничьте представление с помощью accessibilityIdentifier.

accessibilityIdentifier предназначен для разработчиков и предназначен для автоматизации пользовательского интерфейса.

Swift 4

@objc func handleTap(_ gestureRecognizer: UITapGestureRecognizer) {
    let positionInView = gestureRecognizer.location(in: view)
    let hitTestView = view?.hitTest(positionInView, with: nil)
    print("hitTestView: \(hitTestView?.accessibilityIdentifier)")
}
Другие вопросы по тегам