Использование MayoutoutSubviews () работает должным образом при езде на велосипеде через Uibuttons, но не при езде на велосипеде при получении их по тегу

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

Вопрос

Я пытаюсь имитировать функциональность перетаскивания и падения iPhone для игры в плитку и в настоящее время использую Matrixcells для генерации Uibuttons в просмотре итализации и добавляю их в вид. У матрикселей есть order тег, который также используется для их собственной кнопки ([button setTag:[cell order]];).

При использовании `LayoutoutSubviews 'для прохождения uibuttons в представлении, чтобы расположить их в сетке, он работает нормально. Сетка появляется, и моя функциональность перетаскивания позволяет мне свободно перетаскивать кнопки, где я буду.

- (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;
    }
}

}

Однако езда на велосипеде через subviews Не работает при изменении порядка ячеек, так как я уверен, что я вообще не должен возиться там. Итак, я хотел проехать через свой MatrixCells и использовать их order Чтобы получить соответствующий вид, а затем изменить frame. Анкет Тем не менее, компоновка испортится на кнопке 0, и я больше не могу их использовать в качестве кнопок.

- (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;
    }
}

}

Вот картина с результатами: http://i52.tinypic.com/2q903lk.png

viewWithTag казалось, что быть самым элегантным решением для этого. Так что я в растерянности. Есть идеи, почему эти реализации не делают то же самое?

Это было полезно?

Решение 2

[self viewWithTag:0] возврат self Во -первых, вместо ожидаемого (UIButton *), так как я не изменил представление tag После инициализации. Очевидно отмечает дефолт до 0 при инициализации. layoutsubviews затем приступил к изменению frame из self, испортить макет и функциональность. Я решил эту дилемму, изменив тег представления на 999 при инициализации.

Другие советы

Мне это кажется, как будто у тебя есть фон UIImage Чтобы обеспечить этот серый градиент фон. Также выглядит как ваша кнопка 0 может быть [cell order] 0. Я догадаюсь, что вы никогда не меняли бирку своего фона UIImage, что, таким образом, не по умолчанию до 0.

Когда вы звоните [self viewWithTag] во-первых UIButton (помечен 0), он найдет первый подвесок с тегом 0 - фоновое изображение, а не UIButton Вы ожидали - и переместите это. Это, я подозреваю. Вот почему все остальные кнопки в порядке, почему фон странным образом движется, и почему ваша кнопка 0 не видна.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top