Подобные сети вкладки для iPhone

Что лучший подход должен реализовать вкладки, которые похожи на веб-приложения на iPhone, как снимок экрана ниже (заметьте вкладки "Checkin-Info-Friends")? Это не часть стандартной библиотеки UIKit, но, кажется, очень распространен в последнее время.

Я потратил значительные приложения разработки времени для iPhone, но не разработку средств управления как этот. Что было бы лучшим подходом здесь:

  • создайте новый UIView для каждого содержания вкладки и добавьте три подпредставления к mainview немедленно?
  • создайте новый UIViews только, когда пользователь нажмет на каждую из вкладок?
  • Поместите все содержание в UIScrollView и просто измените страницу, поскольку пользователь нажимает на каждую вкладку?

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

alt text
(источник: foursquaregame.com)

6
задан Glorfindel 21 May 2019 в 10:06
поделиться

4 ответа

Мой подход к аналогичной проблеме заключался в том, чтобы сделать все 4 (в моем случае) вкладками, но ответьте на didReceiveMemoryWarning, отпустив все, кроме текущего представления вкладок. (Затем, конечно, вы должны убедиться, что создали новое представление, если оно не существует, когда пользователь выбирает новую вкладку.)

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

3
ответ дан 17 December 2019 в 02:29
поделиться

You can have each tab be a real view controller with nib and everything. The only catch is that you must forward on the standard view controller calls you want to receive (viewWillAppear, etc) but it makes the coding much cleaner since you code just as you would for any other view (although for a smaller space).

You call each controllers "view" property to get out the view, which you add as a subview of a container view you have under the tabs.

1
ответ дан 17 December 2019 в 02:29
поделиться

Я думаю, что лучше всего иметь три ссылки UIView * на подпредставления в родительском представлении или контроллере представления, все изначально нулевые, а затем иметь подпрограмму для скрытия двух других представлений, если они видны и либо построить и показать, либо просто показать новое представление. Предполагая, что нет особых требований к памяти.

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

Если на самом деле существует большой объем памяти или ресурсов, используемых любым из трех подпредставлений, тогда мой совет отменяется, и каждое из подпредставлений и / или любые объекты с интенсивным использованием памяти за ними должны быть не только скрыты, но и выгружены, когда это возможно. Я думаю, что с учетом того, что вы используете там карты Google, к этому может относиться необходимость выгрузки, когда они скрыты.

Правильно ли это сделать? Мне не хватает каких-то дополнительных деталей?

1
ответ дан 17 December 2019 в 02:29
поделиться

If all three are table views, you might get away with using a single UITableViewController that changes contents based on the selected tab. Otherwise I second KHG's comment of using real view controllers to back up each of the subviews.

For the tabs themselves consider subclassing UISegmentedControl.

1
ответ дан 17 December 2019 в 02:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: