UIView меньше другого UIView - PullRequest
1 голос
/ 25 октября 2011

У меня UIView максимум 30, затем я добавляю UITableView в качестве подпредставления с 30 в качестве origin.y. Поскольку таблица остается «под» основным видом, я не могу выбрать ячейки. Следовательно, я реализовал этот метод:

 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    NSLog(@"Tocco intercettato");
    if (oldSet && oldEvent) {
        [table touchesEnded:oldSet withEvent:oldEvent];
    }
    oldSet = touches;
    oldEvent = event;
    [table touchesBegan:touches withEvent:event];
    [table touchesEnded:touches withEvent:event];
    }

Отводы работают, но слайды не работают, и, следовательно, я не могу сдвинуть стол. Какая-то идея, чтобы решить?

1 Ответ

1 голос
/ 26 октября 2011

Передача касаний из вышележащего UIView в нижележащий UITableView не работает (как вы видите, касания проходят, но не прокручиваются). Это связано с тем, что UITableView (как подкласс UIScrollView) выполняет всевозможные странные действия с цепочкой респондента (ваш код также немного странный, когда вы вызываете как touchesBegan, так и touchesEnded из метода touchesBegan вышележащего представления, но это не поэтому ты не можешь прокрутить стол).

Простой способ достичь того, чего вы хотите (если я правильно понял), это переопределить метод hitTest:withEvent: в вашем вышележащем представлении и заставить метод возвращать базовый UITableView (вместо self, который является реализация по умолчанию):

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    UITableView *tv = (UITableView *)[self.superview.subviews objectAtIndex:0];
    return tv;
}

Обратите внимание, что в этом коде предполагается, что UITableView является первым представлением, добавленным к вашему контроллеру представления, и что после него добавляется перекрывающий UIView.

Редактировать: ОК, перечитав ваш вопрос, я думаю, что понимаю ваш вопрос. У вас есть главное представление с высотой 30, и к этому представлению вы добавили UITableView при y = 30. Я думаю, что добавление этого метода к вашему основному виду сделает то, что вам нужно:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    if (point.y < self.frame.size.height) {
        return self;
    } else {
        return myTableView; // assumes myTableView is a reference to the
                            // UITableView that you've added
    }
}

По сути, вы говорите ОС, что все касания должны передаваться myTableView, если они находятся за пределами вашего основного вида.

Однако более простым способом было бы добавить как основной вид с 30 пикселями (оранжевая вещь), так и UITableView как подпредставления другого представления (или контроллера представления). Таким образом, вам не придется делать ничего хитрого, чтобы ваш стол вел себя как обычный стол.

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