Usando layoutsubviews () funciona correctamente cuando el ciclismo a través UIButtons, pero no cuando el ciclismo al recuperar ellos por etiqueta

StackOverflow https://stackoverflow.com/questions/4659788

Pregunta

Estoy tratando de imitar la funcionalidad de arrastrar y soltar iPhone trampolín para un juego de fichas y actualmente estoy usando MatrixCells para generar UIButtons en el initalisation Ver y añadirlos a la vista. Los MatrixCells tienen una etiqueta de order, que se utiliza para su propio botón, así ([button setTag:[cell order]];).

Cuando se utiliza `layoutSubviews' para recorrer las UIButtons en la vista de disponerlas en una cuadrícula, que trabaja muy bien. La cuadrícula aparece y mi funcionalidad de arrastrar me permite libre de arrastrar los botones donde lo haré.

- (void)layoutSubviews {

int row = 0;
int col = 0;
for ( UIButton *button in [self subviews] ) {
    [button setFrame:CGRectMake( col * 80 + 5, row * 80 + 25, 70, 70)];

    if (col < 3) {
        col++;
    }
    else {
        row++;
        col = 0;
    }
}

}

Sin embargo, el ciclismo a través subviews no funciona cuando se cambia el orden de las células, ya que estoy bastante seguro de que no tengo que perder el tiempo en allí en absoluto. Por lo tanto, quería pasar por mi MatrixCells y utilizar sus order para obtener la vista correspondiente y luego cambiar el frame. Sin embargo, la disposición se cometa un error en el botón 0 y no puedo usarlos como botones más.

- (void)layoutSubviews {

int row = 0;
int col = 0;
for (MatrixCell *cell in currentOrder) {
    UIView *view = [self viewWithTag:[cell order]];
    [view setFrame:CGRectMake( col * 80 + 5, row * 80 + 25, 70, 70 )];
    if (col < 3) {
        col++;
    }
    else {
        row++;
        col = 0;
    }
}

}

Aquí está una foto con los resultados: http://i52.tinypic.com/2q903lk.png

viewWithTag parecía el ser la solución más elegante para esto. Así que estoy en una pérdida. Cualquier idea de por qué estas implementaciones no hagan lo mismo?

¿Fue útil?

Solución 2

retornos [self viewWithTag:0] self en primer lugar, en lugar de la (UIButton *) esperar, ya que no cambiaba tag de la vista en la inicialización. Aparentemente etiquetas predeterminadas a 0 en la inicialización. layoutsubviews luego procedió a cambiar el frame de self, ensuciar el diseño y la funcionalidad. He resuelto este dilema cambiando la etiqueta de la vista a 999 en la inicialización.

Otros consejos

A mi me parece más bien como que tiene un UIImage fondo para proporcionar ese telón de fondo gris degradado. También parece que el botón 0 podría tener un [cell order] de 0. Voy a suponer que usted nunca ha cambiado la etiqueta de su UIImage fondo, que de este modo por defecto a 0.

Cuando se llama a [self viewWithTag] por primera UIButton (con la etiqueta 0), encontrará la primera vista secundaria con una etiqueta 0 - la imagen de fondo, no el UIButton que esperaba - y pasar eso. Esto, sospecho. Es por eso que todos los demás botones se alinean bien, ¿por qué el fondo se mueve extrañamente, y por qué su botón 0 no es visible.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top