Использование layoutsubviews () работает правильно при циклическом переключении UIButton, но не при циклическом извлечении их по тегу - PullRequest
1 голос
/ 11 января 2011

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

Когда вы используете `layoutSubviews 'для циклического перемещения по UIB-кнопкам в представлении, чтобы расположить их в виде сетки, все работает нормально. Сетка всплывает, и моя функция перетаскивания позволяет мне свободно перетаскивать кнопки, где я буду.

- (void)layoutSubviews {</p> <pre><code>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 {</p> <pre><code>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 ]

2 голосов
/ 11 января 2011

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

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

1 голос
/ 12 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...