Я получил ошибку uitoolbar, когда меняю состояние подвидов uiviews.

Основная идея, мне нужно заблокировать взаимодействие с пользователем, когда я получаю интернет-данные. И когда я получу все данные, мне нужно разблокировать взаимодействие с пользователем. После разблокирования взаимодействия с пользователем мои элементы UIToolBar не получили никаких изменений.

Я создал простой код, демонстрирующий это поведение.

Сначала я создал UISplitViewController. На DetailsViewController я добавил UIToolBar с одним элементом.

DetailViewController

- (void)viewDidLoad
{
  [super viewDidLoad];

  __block UIView *myView = self.view;
  dispatch_async(dispatch_get_main_queue(), ^{
    [AppDelegate setInteraction:NO onView:myView];
    [AppDelegate setInteraction:YES onView:myView];
 });
}

AppDelegate

+ (void)setInteraction:(BOOL)allow onView:(UIView *)aView {
 dispatch_async(dispatch_get_main_queue(), ^{
        [aView setUserInteractionEnabled:allow];
        for (UIView * v in [aView subviews]) {
            [self setInteraction:allow onView:v];
        }
 });
}

После разблокирования взаимодействия с пользователем мои элементы UIToolBar не получили никаких изменений.

2 ответа

В подпредставлениях aView, вероятно, может быть ваша панель инструментов, но не кнопка панели. Может быть, вы можете просто добавить чистое представление маски фона, чтобы заблокировать взаимодействие и удалить его, чтобы позволить пользователю взаимодействовать снова.

Нечто подобное случилось со мной однажды при вызове модального представления. Попробуйте сохранить элементы панели инструментов перед вашим интернет-кодом, а затем восстановить их следующим образом:

NSArray *storeToolbarItems = self.toolbar.items;
self.toolbar.items = nil;

//Execute your code to disable/enable interaction and receive internet data
//Once you have re-enabled user interaction... 
[self.toolbar setItems:storeToolbarItems];
Другие вопросы по тегам