Я получил ошибку 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];