#ios #ipad
#iOS #iPad
Вопрос:
Я младший, и я действительно изо всех сил пытался заставить это работать, был бы очень признателен за помощь.
Я пытаюсь создать приложение, в котором вы можете прокручивать различные веб-просмотры, выбирая элемент из таблицы во всплывающем окне (пока всплывающее окно остается на месте). К сожалению, я не могу заставить свой ScrollView перемещаться, когда я выбираю элемент из всплывающего окна.
Я настроил UIScrollView с управлением страницей в главном UIViewController. ScrollView заполнен (pageViewController) UIWebViews. Основной UIViewController имеет панель навигации с кнопкой, при нажатии на кнопку создается всплывающее окно. Когда я выбираю элемент из таблицы во всплывающем окне, я хочу, чтобы мой UIScrollView прокручивался до определенной позиции (соответствует выбранной странице), но ScrollView не перемещается.
Приведенный ниже метод принимает значение, выбранное из всплывающего окна, и использует номер страницы, чтобы определить, куда должен прокручиваться ScrollView, но это не работает, потому что на данный момент мой ScrollView равен Null. При необходимости я могу предоставить больше кода.
основной код UIViewController.m:
- (void)setDetailItem:(id)newDetailItem {
if (detailItem != newDetailItem) {
[detailItem release];
detailItem = [newDetailItem retain];
NSString *pgnum = [[NSString alloc] initWithString:[detailItem description]];
int pg;
if(pgnum == @"Page 1"){
pg =1;
}
if(pgnum == @"Page 2"){
pg =2;
}
if(pgnum == @"Page 3"){
pg =3;
}
[pgnum release];
pageControl.currentPage = pg;
[self loadScrollViewWithPage:pg - 1];
[self loadScrollViewWithPage:pg];
[self loadScrollViewWithPage:pg 1];
CGRect frame = scrollView.frame;
frame.origin.x = frame.size.width * pg;
frame.origin.y = 0;
[scrollView scrollRectToVisible:frame animated:YES];
pageControlUsed = YES;
}
if (popoverController != nil) {
[popoverController dismissPopoverAnimated:YES];
}
}
Вот как я запустил popOverController
Информационная кнопка находится на панели навигации.
Значение ScrollView НЕ равно нулю в информационной кнопке
- (void)infoButton:(id)sender {
NSLog(@"Entering: infoButton");
// [self inspectView:self.view level:@""];
if (self.popoverController == nil) {
PopoverViewController *popoverViewController =
[[PopoverViewController alloc]
initWithNibName:@"PopoverViewController"
bundle:[NSBundle mainBundle]];
popoverViewController.navigationItem.title = @"Navigation";
UINavigationController *navController =
[[UINavigationController alloc]
initWithRootViewController:popoverViewController];
UIPopoverController *popover =
[[UIPopoverController alloc]
initWithContentViewController:navController];
popover.delegate = self;
[popoverViewController release];
[navController release];
self.popoverController = popover;
[popover release];
//NSLog(@"User pressed the info button");
}
[self.popoverController presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; }
Ответ №1:
UIPopover
не являясь ни самым очевидным классом для использования с точки зрения управления памятью, ни самым стабильным, не требует, чтобы вы освобождали его перед представлением. Фактически, это приводит к возникновению фатального исключения! Всплывающие окна должны быть выпущены после их удаления с экрана и / или в -dealloc
.
Комментарии:
1. Спасибо за вашу помощь. Я удалил [popover release], но это, похоже, не решило проблему. Моя проблема в том, что ScrollView не прокручивается до горизонтального положения после выбора номера страницы из всплывающего окна (ScrollView показывает null в отладчике).
2. Возможно, вы даже не создаете экземпляр ScrollView, или, как и всплывающее окно, вы можете освободить его, прежде чем начать вызывать его для прокрутки. Используйте свойство -contentOffset scrollview, чтобы установить его, и вернитесь к своим методам, чтобы проверить [[scrollview alloc] init …] и [scrollview release];
3. Еще раз спасибо за вашу помощь. Я удалил все версии, но у меня все еще была та же проблема. Поэтому вместо этого я попробовал другой подход. Я удалил таблицу из всплывающего окна и заменил кнопками. Это сработало. ScrollView перемещается в местоположение, связанное с кнопкой. Я предполагаю, что таблица и ее скроллер каким-то образом вызвали проблему. Еще раз спасибо за вашу поддержку в этом.
4. Нет проблем, удачи с этим.