Цель C Маршрут / Путь с массивом кнопок - PullRequest
0 голосов
/ 15 февраля 2012

Я практически новичок в Objective C и iOS Dev, и мне нужно создать приложение, которое записывает "маршрут" или "путь" (например, приложение защиты от блокировки точек).Поэтому я подумал о кнопках, которые нажимаются при перетаскивании, включая всех прямых соседей (справа, слева, вверх, вниз).Я начал кодировать, но я не знаю, в правильном ли я направлении и Как я могу реализовать перетаскивание, чтобы пользователю не приходилось нажимать каждую кнопку, а просто отслеживать путь пальцем

viewController.m

(void) viewDidLoad

[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
for (int y=0; y < 9; y++) {
    for (int x = 0; x < 9; x++) {
        UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
        button.frame = CGRectMake(20 + 30 * x, 20 + 30 * y, 30, 30);
        unsigned buttonNumber = y * 9 + x + 1;
        button.tag = buttonNumber;

        button.backgroundColor = [UIColor blackColor];

        [button setTitle:[NSString stringWithFormat:@"%u", buttonNumber] forState:UIControlStateNormal];
        [button setTitle:[NSString stringWithFormat:@"!"] forState:UIControlStateHighlighted];
        [button addTarget:self action:@selector(buttonPressed:) forControlEvents:(UIControlEventTouchUpInside)];
        [self.view addSubview: button];
    }
}

Этот код (адаптированный из моего другого поста Хорхе) генерирует сетку кнопок 9x9 с уникальным тегом.

И соответствующий метод действия,

(void) buttonPressed: (UIButton *) button

if(first){

    for (int y=0; y < 9; y++) {
        for (int x = 0; x < 9; x++) {
            unsigned buttonNumber = y * 9 + x + 1;
            UIButton *auxButton = (UIButton *)[self.view viewWithTag:buttonNumber];

            if ((auxButton.tag != (button.tag + 1)) || (auxButton.tag != (button.tag - 1)) || (buttonNumber != (button.tag + 9)) || (buttonNumber != (button.tag - 9)) || (buttonNumber != button.tag )){

                auxButton.enabled = FALSE;

            }
        }
    }else{ 
//not implemented yet
}

То, что я здесь сделал, было: изначально все кнопки были включены, но когдапри нажатии первой она отключит все кнопки, кроме прямых соседей (l, r, u, d).

My if (условие) не работает с условиями ИЛИ (||), поэтому всекнопки отключены, но если я использую только одно условие, скажем, если (auxButton.tag! = button.tag + 1), оно работает.

Что здесь может быть не так?Как я могу сделать так, чтобы путь, пройденный касанием, нажимал все кнопки, по которым он проходил?

Заранее спасибо!

1 Ответ

0 голосов
/ 15 февраля 2012

Чтобы отключить все кнопки, кроме button и его соседей, вы можете сделать следующее:

for (int i = 0; i < 81; i++) {
    UIButton *other = (UIButton *)[self.view viewWithTag:i+1];
    if (other != button) {
        int deltaRow = abs((button.tag-1)%9 - (other.tag-1)%9);
        int deltaColumn = abs((button.tag-1)/9 - (other.tag-1)/9);
        other.enabled = (deltaRow == 0 && deltaColumn == 1) // same row, successive columns
                      ||(deltaRow == 1 && deltaColumn == 0) // same column, successive rows
    }
} 

Снимите тест (other != button), если хотите, чтобы кнопка тоже была отключена.

Также проверьте, хотите ли вы использовать UIControlEventTouchDragInside или UIControlEventTouchDragEnter вместо UIControlEventTouchUpInside. Смотри документацию здесь .

...