Estoy tratando de ajustar mi subviews
en una subclase UIScrollView
, pero no quiero molestar a los indicadores de desplazamiento. No parece haber ninguna interfaz pública para acceder a estos y quiero verificar si una vista es uno de los indicadores de desplazamiento o no (para poder ignorarlo).Cómo excluir indicadores de desplazamiento al enumerar subvistas de un UIScrollView?
UIScrollView.h
declara estas dos Ivars:
UIImageView* _verticalScrollIndicator;
UIImageView* _horizontalScrollIndicator;
... pero he intentado lo siguiente y tiene un error de vinculador:
for(UIView* v in self.subviews)
{
// Ignore the scroll-indicator views
if((v == _horizontalScrollIndicator) ||
(v == _verticalScrollIndicator))
{
continue;
}
// View is one of mine - do stuff to it...
}
de Apple, obviamente, no quiero que jugar con ellos, en En ese caso deberían hacer algo inteligente para que la matriz devuelta desde subviews
no los incluya (¡vamos, Apple, no es tan difícil!), pero hasta entonces, ¿cómo puedo ignorarlos?
Estoy escribiendo una subclase UIScrollView, por lo que no tengo el control de esas otras subvistas. Traté de reemplazar a didAddSubview: y willRemoveSubview: para realizar un seguimiento, pero los indicadores de desplazamiento deben agregarse normalmente como cualquier otra vista porque terminan llamando a estos también. – jhabbott
Me gustaría ir con @KurtRevis en este caso. Guarde su propia matriz, manténgala anulando AddSubview: y removeSubview: (que no creo que OS llame para los indicadores de desplazamiento). Si no quiere hacer eso, entonces una respuesta rápida y sucia sin dependencias de Apple es etiquetar las subvistas en addSubview :. Cuando enumera subvistas, rechace las que tienen la etiqueta. La desventaja aquí es que terminarás arruinando las etiquetas para los usuarios de la subclase, que pueden necesitar las etiquetas por sí solos. Otras soluciones Puedo pensar que todas tienen dependencias en las partes internas de Apple. – danh
Apple usa addSubView: para agregar los indicadores de desplazamiento, esto no es viable. Además, cualquier cosa que quiera rastrear subvistas también debe realizar un seguimiento en los métodos insertSubview: *. – jhabbott