TabBarController и SplitViewController - PullRequest
       34

TabBarController и SplitViewController

7 голосов
/ 31 октября 2011

Я хочу, чтобы мои splitviewController отображались в пределах TabBarController. К сожалению, я сначала решил просто иметь SplitViewController и выбрал шаблон яблока. Теперь я нахожусь в неудобном положении, не зная, как добавить его на панель вкладок.

Я попробовал несколько вещей, которые были объяснены здесь в StackOverflow, но лучшим результатом был черный экран с панелью вкладок под ним: - (

Я просто изо всех сил пытаюсь найти хороший и простой способ.

Код моего Appdelegate:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{
// Override point for customization after application launch.
// Add the split view controller's view to the window and display.
self.window.rootViewController = self.splitViewController;
[self.window makeKeyAndVisible];

NSArray *searchPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
documentFolderPath = [searchPaths objectAtIndex: 0];
self.rootViewController.directoryPath = documentFolderPath; 

NSURL *docUrl = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey];
if ([docUrl isFileURL]) {
    NSString *path = [docUrl path];
    self.detailViewController.currentFilePath = path;
    [self.detailViewController setDetails:path newFile:FALSE];
}
return YES;

Ответы [ 4 ]

6 голосов
/ 04 ноября 2011

Вы должны проверить IntelligentSplitViewController - это все, что вам нужно!

Добавив некоторые контроллеры и дизайн, вы можете закончить примерно так:

Screenshot of an iPad app using IntelligentSplitViewController

PS : У меня есть приложение в App Store, использующее этот контроллер, так что идите!

5 голосов
/ 03 ноября 2011

Редактировать:

Я только что понял, что вы действительно хотели разделить вид внутри панели вкладок.по документации Apple, это нет нет.http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/iPadControllers/iPadControllers.html

Контроллер разделенного представления всегда должен быть корнем любого интерфейса, который вы создаете.Другими словами, вы всегда должны устанавливать представление из объекта aUISplitViewController в качестве корневого представления окна вашего приложения.Панели интерфейса разделенного просмотра могут содержать контроллеры навигации, контроллеры панели вкладок или любой другой тип контроллера представления, который необходим для реализации интерфейса.


Если вы все еще хотите использоватьпанель вкладок, материал, который я написал ниже, все еще применяется, но ваше подпредставление не должно быть контроллером splitview.

оригинальный ответ:

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

Вы можете найти учебники на uitabbarcontroller для получения дополнительной информации.Это выглядит многообещающе: http://www.xcode -tutorials.com / uitabbarcontroller-and-uinavigationcontroller /

И это тоже удобно: http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UITabBarController_Class/Reference/Reference.html

вот пример:

   - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        // Override point for customization after application launch.
        UITabBarController *tabBarController = [[UITabBarController alloc] init];
        //set tbconroller as root view controller of window
        [self.window setRootViewController:tabBarController];
        //window retains controller so we can release
        [tabBarController release];

        //create two view controllers
        UIViewController *vc1 = [[HypnosisViewController alloc] init];
        UIViewController *vc2 = [[CurrentTimeViewController alloc] init];
        //make an array containing these two view controllers
        NSArray *viewControllers = [NSArray arrayWithObjects:vc1,vc2,nil];

        [tabBarController setViewControllers:viewControllers];

        //the views are retained their new owners, so we can release
        [vc1 release];
        [vc2 release];          

        [[self window] makeKeyAndVisible];
        return YES;
    }

Если вы используете конструктор интерфейса, вот еще несколько учебных пособий http://www.cimgf.com/2009/06/25/uitabbarcontroller-with-uinavigationcontroller-using-interface-builder/ или http://www.mobisoftinfotech.com/blog/iphone/iphone-tabbar-uitabbarcontroller-tutorial/

3 голосов
/ 20 ноября 2015

Я только что решил эту проблему, так как она работала в моей голове последние пару дней.Вы можете иметь столько «разделенного вида», сколько хотите внутри «UITabbarView» или наоборот, без использования какого-либо кода, но если вы хотите удовлетворить Apple и сделать контроллер разделенного представления корневым контроллером, вам нужно ввести одну строкукода.

Таким образом, говядина здесь.

  1. Создайте один проект отдельного представления или что вам нравится.
  2. В главном раскадровке перетащите и отпустите разделениеконтроллер представления.
  3. Перетащите инициализирующую стрелку из «контроллера единого представления» и назначьте ее своему «контроллеру разделения представления».
  4. Теперь, если вы запустите свой проект, он должен загрузить разделениеview.
  5. Создайте новый подкласс сенсорного файла кока "UISplitViewController", назовите его как хотите.
  6. В "viewDidLoad" добавьте следующую строку "self.preferredDisplayMode = .PrimaryHidden" // просточтобы скрыть главный вид
  7. Вернувшись к основной раскадровке, выберите контроллер представления Split и сделайте его контроллер вида тем, который вы только что создали.
  8. Теперь удалитеte «Вид» контроллера представления сведений (только представление)
  9. Найдите «представление контейнера» в библиотеке объектов, перетащите его и поместите в контроллер представления сведений.
  10. Этогенерирует контроллер представления, подключенный к «представлению контейнера». Вставьте созданный контроллер представления в «Контроллер панели вкладок». Теперь у вас есть разделенное представление, подключенное к контроллеру панели вкладок.
  11. Ваш TabBarController должен иметь один контроллер представления (элемент 1), замените «представление» (только представление) этого контроллера на «ContainerView».
  12. Теперь перетащите новый контроллер представления «Разделение» из «Библиотеки объектов». Подключите «ContainerView» в «Элемент 1»."к новому добавленному" Split view controller ".
  13. Теперь, если вы помните, у нас должен быть один контроллер представления, висящий где-то вокруг, так как мы создали отдельный проект представления, найдите, что контроллер подключил его к контроллеру панели вкладок, так что теперь у вас есть 2 элемента.
  14. Повторите тот же процесс, замените представление на «представление контейнера» и добавьте новыеplit view controller и подключите его к этой раскадровке.

Теперь этот финальный раскадровка должен выглядеть примерно так.Опять же, вам не нужно начинать с контроллера Split View, но я сделал это только для соответствия рекомендациям Apple.

enter image description here

enter image description here

2 голосов
/ 03 ноября 2011

Из документации Apple это не так.

Но есть способ легко добиться этого (мы сделали это для приложения).

посмотрите на http://www.codeworth.com/blog/mobile/ios-splitviewcontroller-inside-tabviewcontroller/

Я думаю, что это будет удачный ответ на вопрос.

...