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();
}
}
:)
Хакерская элегантность:
- Получите позицию щелчка.
- Получите представление с помощью hitTest.
- Разграничьте представление с помощью 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)")
}