Странная проблема с прокруткой с использованием UITableView - PullRequest
1 голос
/ 19 января 2010

Я работающий UINavigationController, помещающий два разных UITableView в стек и из него. Все мои функции работают правильно, кроме прокрутки. Когда любая из таблиц прокручивается над верхней строкой или под нижней строкой, она остается там, открывая поле над / под таблицей. Я ищу, чтобы таблица «отскочила» назад, чтобы была видна только таблица, а не область пустого пространства за ее пределами - как и любое другое приложение для iPhone.

Один из моих UITableView загружается NIB, а другой создается программно - оба имеют одинаковый результат. Я перепробовал все настройки отказов и прокрутки в Nib, но, похоже, ничего не работает.

Может кто-нибудь сказать мне, что я делаю не так? Пожалуйста, дайте мне знать, если я смогу более подробно описать мою проблему.

Спасибо

-Скотт

Я хотел бы добавить немного больше информации, так как до сих пор не могу понять эту проблему. Я должен отметить, что приложение, к которому я пытаюсь добавить этот NavigationController, НЕ является основным видом. У меня есть SettingsViewController, который использует Nib для загрузки. В этом контроллере я хочу создать новый набор представлений на основе навигации. Так что изнутри моего SettingsViewController, если пользователь нажимает кнопку, я ...

В моем селекторе кнопок:

<code>
TextListViewController *controller = [[TextListViewController alloc] initWithStyle:UITableViewStylePlain];</p>

<p>controller.title = @"Test Table View"; 
navController = [[UINavigationController alloc] initWithRootViewController:controller];
navController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentModalViewController:navController animated:YES];
[controller release];

Приведенный выше код прекрасно работает во всех отношениях, кроме прокрутки. Я могу обрабатывать все методы делегата и помещать новые контроллеры в стек. ЕДИНСТВЕННАЯ проблема, с которой я сталкиваюсь, заключается в том, что корневой контроллер (и каждый другой нажатый контроллер) не будет правильно прокручиваться.

В любом случае, это позволяет мне прокручивать верх и низ стола и не возвращается назад, как должно. Он также не имеет ощущения свободного колеса при прокрутке. Вместо этого он останавливается, как только вы убираете палец, независимо от того, как быстро вы прокручиваете. Очень странно.

Я попытался создать другой проект с использованием шаблона навигации - и, конечно, он работает нормально - но шаблон предполагает, что представление NavigationController всегда прикреплено - что не в моем случае. Я создаю все это на лету в стандартном ViewController.

Спасибо за вашу помощь, Кевин, но я все еще ищу некоторую помощь здесь.

Спасибо

Ответы [ 4 ]

2 голосов
/ 20 января 2010

Ну, я исправил проблему, и это не имело никакого отношения к тому, как я добавлял UITableView в UINavigationController или как я создавал представление.Оказывается, это совершенно не связано ни с чем из этого.

Я использую жесткий цикл while для обработки своего игрового цикла.Мне нужен был способ обработки сообщений ОС в цикле, чтобы избежать блокирования касаний и других событий.Вот что я использовал в середине моего цикла:

<code>
while(CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.002, TRUE) == kCFRunLoopRunHandledSource);

До этой проблемы с прокруткой у меня не было проблем с этой реализацией вообще.По какой-то причине это нарушает функциональность прокрутки с помощью UITableView.

Я изменил свой игровой цикл, поэтому приведенный выше код не нужен, и все начало работать.

Спасибо ...

0 голосов
/ 26 февраля 2013

У меня была та же проблема, что и у вас, которая, как вы заявили выше, была связана с тем, как вы вызывали runloop:

while(CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.002, TRUE) == kCFRunLoopRunHandledSource);

Похоже, что DefaultMode - это не та вещь, которую нужно ждать, я изменил свой код для ожидания в UITrackingRunLoopMode, и TableView работал правильно. В моем случае я использовал:

[[NSRunLoop currentRunLoop] runMode:UITrackingRunLoopMode beforeDate:[NSDate distantFuture]];

И все работало правильно.

0 голосов
/ 19 января 2010

Ваш вопрос и комментарии, кажется, предполагают, что вы присоединяете UITableView к вашему UINavigationController каким-либо иным способом, чем нажатием UITableViewController. Если вы не делаете это таким образом, вы действительно должны.

В общем, если вы можете поместить контроллер дочернего вида на UINavigationController, то вы также можете использовать контроллер дочернего представления сам по себе, просто чтобы проверить его. Попробуйте сделать так, чтобы ваш UITableViewController просматривал корневой вид вашего окна, и посмотрите, будет ли это то, что вы ожидаете. Таким образом, вы можете изолировать проблему либо в части представления таблицы, либо в части навигации.

0 голосов
/ 19 января 2010

Ваш UITableView является UIScrollView, чье свойство bounces является ключом. Вот ссылка . По умолчанию это YES. Вы проверяли это?

...