2015-10-26 2 views
1

У меня есть сетка кнопок в форме шестиугольника (см. Изображение), которые активны при загрузке экрана. Когда пользователь нажимает одну из кнопок, тогда все кнопки, кроме тех, которые непосредственно окружают эту кнопку, деактивируются. Так, например, если пользователь нажимает 4, тогда все кнопки, кроме 0, 1, 3, 5, 8 и 9, деактивируются. Если они нажимают 0, то все, кроме 1, 3 и 4, деактивируются.Swift: сложность задумывания логики для кнопок активации/деактивации

В настоящий момент я контролирую все кнопки с помощью одного IBAction и использую теги, чтобы отличить их, и я бы предпочел сохранить его таким образом. Но я не могу придумать, как можно говорить о том, какие кнопки следует отключать, кроме чрезвычайно длинного и сложного оператора if. Если кто-то может дать мне совет по другому подходу, я был бы признателен.

Hexagon Grid

ответ

1

Что мне делать в этой ситуации сохранить таблицу соседей. Таким образом, например, если пользователь нажимает кнопку 9, вы смотрите «9» в таблице (по тегу), и есть массив всех его соседей (4, 5, 10, 14, 13, 8), и вы просто цикл и отключить все, кроме них. Еще лучше, пусть это будет набор всех его соседей, потому что тогда вы можете сделать арифметику: вычтите этот набор и тег исходной кнопки из набора всех тегов, и это список кнопок для отключения.

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

+0

Спасибо, ваши идеи были очень полезными. Не создавайте таблицу программно, но я думаю, мне, возможно, придется рассмотреть ее в будущем. – Eric

0

Вот Interface Builder-ориентированный подход, но это может быть сделано исключительно в коде без IB, а также:

  1. Подкласс UIButton с пользовательского класса, который будет использоваться для всех ваших кнопок шестигранной

  2. Добавить свойство IBOutletCollection под названием «adjacentCells» в пользовательском подкласс, который должен быть определен как массив пользовательского типа кнопки

  3. В IB, сделать все кнопки шестигранных экземпляров т он пользовательский UIButton подкласса вы создали выше

  4. В IB, для каждой кнопки, перетащите соседние ячейки для этой кнопки его «adjacentCells» IBOutletCollection собственности

  5. В вашем одном методе IBAction, сначала отключить все кнопки. Затем активируйте кнопку, которая была нажата. Затем активируйте все кнопки в массиве смежных элементов в нажатой кнопке.

+0

Я изучаю Swift, когда я занимаюсь этим проектом, и на данный момент ваша идея немного над моей головой. Когда у меня появятся новые знания, я снова посмотрю на это. – Eric

 Смежные вопросы

  • Нет связанных вопросов^_^