Вы можете попробовать отправить свой прогресс, просмотрите сообщение resignFirstResponder
.Это должно сделать представление под ним первым респондентом, чтобы вы могли использовать его элементы управления.
PS: Я также думаю, что, возможно, ваш обзор прогресса может заполнить весь экран;в этом случае изменение первого респондента может не помочь ...
РЕДАКТИРОВАТЬ: после того, как вы подтвердили, что ваше представление занимает полный экран ...
Если ваше представление полноэкранное, оноперехватывает все касания, которые вы делаете (потому что, когда он не полностью скрыт / прозрачен, он покрывает взгляды за ним).У вас есть два варианта: либо вы уменьшаете вид, чтобы не перекрывать друг друга, либо делаете так, чтобы касания перенаправлялись на вид позади него.
Последнее можно сделать несколькими способами, яНадеюсь, что вам это удастся:
, который вы можете попробовать и переопределить в своем представлении прогресса (это должен быть пользовательский UIView), метод touchesBegan
;
вы можете попытаться переопределить метод hitTest
в вашем представлении прогресса;
Это то, что я бы попробовал, например, в touchesBegan
:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
if (![self viewIsDisappearing])
[self.nextResponder touchesBegan:touches withEvent:event];
}
viewIsDisappearing
- это метод, который вы должны реализовать, чтобы возвращать YES, если анимация, позволяющая скрыть представление прогресса, уже началась.Во время анимации вид еще не скрыт, поэтому он будет перехватывать касания, и вы отправляете эти касания следующему респонденту.
Возможно, вам также необходимо переопределить методы, связанные с касаниями другого UIResponder:
– touchesMoved:withEvent:
– touchesEnded:withEvent:
– touchesCancelled:withEvent:
РЕДАКТИРОВАТЬ:
Я нашел свой класс, где я делаю что-то похожее на то, что я предлагаю здесь, только без использования nextResponder
.
Идея такова: SDSTransparentView
- это UIView
, охватывающий весь экран.Вы инициализируете его так:
[[SDSTransparentView alloc] initWithContent:contentView andDelegate:delegate];
Делегат реализует SDSTransparentViewProtocol
, который просто содержит один метод:
-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event outsideOfView:(UIView*)view;
Когда пользователь касается любого места в прозрачном представлении, он передаетприкоснитесь к делегату, вызвав метод протокола.Я бы посоветовал вам игнорировать аргументы contentView
и outsideOfView
(они полезны для меня, но, возможно, не для вас; вы можете либо передать ноль, либо, что лучше, представление за прогрессом).
Вы можете найти класс на моем github .Вам нужны только файлы SDSTransparentView. *.На самом деле, я предлагаю только взглянуть на то, как реализован класс (очень короткий), и сделать то же самое в вашем представлении прогресса.
Я могу заверить, что этот подход работает!