标签: uisplitviewcontroller

在BarButtonItem打开时按下它时解除iPad UIPopoverController

在iPad上使用拆分视图,我有以下代码:

- (void) splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)pc {
  barButtonItem.title = @"Categories";
  NSMutableArray *items = [[toolbar items] mutableCopy];
  [items insertObject:barButtonItem atIndex:0];
  [toolbar setItems:items animated:YES];
  [items release];
  self.popoverController = pc;
}
Run Code Online (Sandbox Code Playgroud)

这可以很好地显示按下按钮时的弹出窗口.但是,如果按下按钮,我也希望让按钮解除,因为它已经打开以遵循良好的指导方针.我该怎么做呢?(即如果用户反复点击此按钮,则弹出窗口应该会隐藏其他所有击中.)

user-interface ipad uisplitviewcontroller dismiss uipopovercontroller

11
推荐指数
2
解决办法
4万
查看次数

UISplitviewcontroller不作为rootview控制器

我正在构建我的第一个iPad应用程序.我的一个要求是处理UISplitviewcontroller和UINavigationController.
我们提出的视图层次结构是

(LoginView) - > UINavigationView(LandingView + CollectionView) - > UISplitViewcontroller(DetailsView).

我们的应用程序仅支持横向模式
我指的是这个SO问题(以及GILT应用程序),作为newbi,我很难根据该描述完成它.

所以我的问题是
1)如果有人可以提供小代码片段或参考教程,我怎么能实现同样的事情
2)根据Apples HIG,UISplitviewcontroller应该是rootviewcontroller,如果不是.Apple会拒绝我的应用程序吗(显然GILT小组已被批准)
3)我找到了MGSplitViewController,我可以使用那个不是root吗?
任何帮助,将不胜感激.作为newbi,我希望我的问题是真实的

ipad uisplitview uisplitviewcontroller

11
推荐指数
2
解决办法
1万
查看次数

如何使用MasterDetail应用程序模板更新DetailView

我是使用拆分视图创建iPad应用程序的新手.当我第一次使用标准的MasterDetail应用程序模板(Xcode 4.2)创建项目时,它会创建一个MasterViewController和一个DetailViewController.从弹出表(主详细信息视图控制器)中选择行时,模板具有以下方法:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

if (!self.detailViewController) 
{
    self.detailViewController = [[DetailViewController alloc]        initWithNibName:@"DetailViewController" bundle:nil]; 
}
[self.navigationController pushViewController:self.detailViewController animated:YES];
Run Code Online (Sandbox Code Playgroud)

现在我明白当你使用常规导航控制器时,如果你正在为iPhone编程,你只需要做这种类型的事情就可以将另一个视图控制器推到堆栈上.但是,使用此模板,它只是将详细信息视图推送到弹出窗口而不是更新已存在的内容.我很困惑,因为我需要更新以从弹出窗口中选择一些内容(主详细信息视图),然后进行detailView更新.

更新:

为了尝试测试已在DetailViewController中为您设置的"detailItem",我注释掉了pushViewController并添加了以下内容:

//[self.navigationController pushViewController:self.detailViewController animated:YES];
self.detailViewController.detailItem = @"Test";

// setter in detailViewController
- (void)setDetailItem:(id)newDetailItem
{
    if (_detailItem != newDetailItem) {
        _detailItem = newDetailItem;

        // Update the view.
        [self configureView];
    }

    if (self.masterPopoverController != nil) {
        [self.masterPopoverController dismissPopoverAnimated:YES];
    }        
}

- (void)configureView
{
    // Update the user interface for the detail item.
    // detailDescriptionLabel.text is a IBOutlet to the label …
Run Code Online (Sandbox Code Playgroud)

xcode objective-c uisplitviewcontroller ios xcode-template

11
推荐指数
1
解决办法
1万
查看次数

检测主视图和详细视图控制器何时在屏幕上?

我已经UISplitViewController在Xcode 6中实现了使用通用故事板.UISplitViewController现在运行iOS 8的iPhone支持,默认情况下,一次只有一个视图控制器在屏幕上.

我需要知道主屏幕控制器和详细视图控制器何时都在屏幕上(iPad).我需要UITableViewCell在屏幕上删除公开指示符- 只有当主视图控制器在屏幕上(iPhone)时才会呈现它们,就像设置应用程序一样.

我可以简单地检测设备,只在iPhone上添加它们,但不建议这样做.新设备可能只显示一个视图控制器而不能识别为电话.另一种认为是检测,如果self.splitViewControllernil,但不会工作,因为它不会nil在iPhone也不iPad的,因为它实际上是在iPhone上的一个拆分视图控制器.

是否可以检测主屏幕控制器和详细视图控制器何时同时在屏幕上可见?

uisplitviewcontroller ios uiaccessoryview

11
推荐指数
1
解决办法
6117
查看次数

UISplitViewController - 以折叠模式在代码中解除/弹出详细视图控制器

从iOS8开始,我们可以在紧凑型和常规设备上使用UISplitViewController.这很棒,因为我不需要为iPhone和iPad创建两个不同的故事板,但是我遇到了一个问题.

如果拆分视图控制器在iPad上(如果折叠属性为NO),我可以简单地调用它来显示左侧的MasterVC.

self.splitViewController.preferredDisplayMode = UISplitViewControllerDisplayModePrimaryOverlay;
[self.splitViewController.displayModeButtonItem action];
Run Code Online (Sandbox Code Playgroud)

但如果它在iPhone上(如果折叠属性为YES),则忽略displayMode,并且不执行任何操作.

我无法弹出DetailVC,popToRootViewControllerAnimated因为DetailVC拥有自己的导航控制器.

如果没有像dismissViewControllerAnimated:completion:showDetail 一样的视图控制器的方法,Apple如何期望我们在折叠模式下的代码中显示MasterVC(关闭DetailVC)?我们将不胜感激.谢谢

iphone objective-c uisplitviewcontroller ios

11
推荐指数
2
解决办法
9684
查看次数

如何抑制Master-Detail Controller滑动手势,并在iOS 7上重新创建其行为

默认情况下,UISplitViewController提供滑动手势以纵向模式打开主视图.

不幸的是,即使操作详细页面上的滑块,此手势也会打开主控制器!我在这里发现了另一个问题,这个问题被标记为iOS 5.1报告的错误,但问题仍然存在于iOS7上......

现在有办法在这种情况下抑制这种姿势吗?我意识到我可以通过这样做完全删除它:

splitViewController.presentsWithGesture = NO;
Run Code Online (Sandbox Code Playgroud)

然而,允许手势并仍然有可用的滑块将是很好的!

objective-c uisplitviewcontroller ios7

10
推荐指数
1
解决办法
5244
查看次数

如何在Swift中以编程方式创建SplitViewController?

我需要做什么步骤?在Objective-C中,我们创建了一个rootViewControllerdetailViewController之后添加了这个控制器splitViewController.例如:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.backgroundColor = [UIColor whiteColor];
    UISplitViewController *splitViewController = [[UISplitViewController alloc] init];
    MTTRootViewController *rootViewController = [[MTTRootViewController alloc] init];
    MTTDetailedViewController *detailedViewController = [[MTTDetailedViewController alloc]init];
    splitViewController.viewControllers = [NSArray arrayWithObjects:rootViewController, detailedViewController, nil];
    [self.window setRootViewController:(UIViewController*)splitViewController];
    [self.window makeKeyAndVisible];
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能在Swift中做同样的事情?

ipad uisplitviewcontroller ios swift

10
推荐指数
2
解决办法
8165
查看次数

如何在UISplitViewController中命名后退按钮

我有UITableViewController(它的名字是新闻)和UIViewController(它的名字是DetailViewController)和UISplitViewController.我希望它在纵向使用iPad时显示后退按钮.我做了按钮,但我不能说出来.我写了以下代码

detailController.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem()
                detailController.navigationItem.leftItemsSupplementBackButton = true
                detailController.navigationItem.leftBarButtonItem?.title = navigationController?.topViewController.title
Run Code Online (Sandbox Code Playgroud)

但它没有显示按钮的名称.我只看到箭头(箭头有效).

我也在我的UITableViewController(新闻)中尝试了以下内容,但它没有帮助我

在此输入图像描述

我使用这个代码为不同的设备使用两个segue.

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath){
        var screen = UIScreen.mainScreen().currentMode?.size.height
        if (UIDevice.currentDevice().userInterfaceIdiom == UIUserInterfaceIdiom.Pad) || screen >= 2000 && UIDevice.currentDevice().orientation.isLandscape == true  && (UIDevice.currentDevice().userInterfaceIdiom == .Phone){
            performSegueWithIdentifier("showDetailParse", sender: nil)
            self.dismissViewControllerAnimated(true, completion: nil)
        } else if (UIDevice.currentDevice().userInterfaceIdiom == .Phone) {
            performSegueWithIdentifier("showParse", sender: nil)
        }
    }
Run Code Online (Sandbox Code Playgroud)

我在iPad上的结果 在此输入图像描述

我在iPhone上的结果 在此输入图像描述

xcode ipad uisplitviewcontroller ios swift

10
推荐指数
1
解决办法
4550
查看次数

为什么我不能在第一次运行时在UISplitViewController中将Master和Detail视图彼此相邻放置,但是在轮换时它可以工作?

我有一个拆分视图控制器,左侧有一个项目列表,右侧有一个详细视图.AppDelegate中的相关代码:

let splitViewController = mainView.instantiateViewControllerWithIdentifier("initial") as! UISplitViewController



        let rightNavController = splitViewController.viewControllers.last as! UINavigationController
        let detailViewController = rightNavController.topViewController as! DetailsIpad

        let leftNavController = splitViewController.viewControllers.first as! UINavigationController
        let masterViewController = leftNavController.topViewController as! MainViewController

        masterSplitViewController = masterViewController
        detailSplitViewController = detailViewController

        // Override point for customization after application launch.
        let navigationController = splitViewController.viewControllers[splitViewController.viewControllers.count-1] as! UINavigationController
        navigationController.topViewController!.navigationItem.leftBarButtonItem = splitViewController.displayModeButtonItem()
        splitViewController.delegate = self

        self.window!.rootViewController = splitViewController
Run Code Online (Sandbox Code Playgroud)

当我第一次启动应用程序时,我发现拆分屏幕的右侧部分占用了所有屏幕:

在此输入图像描述

如果我旋转屏幕,它会被正确设置(可能因为两个视图都出现在屏幕上):

在此输入图像描述

当我在任何地方设置断点时,我看到右侧的详细视图在左侧的主视图(项目列表)之前加载,尽管没有直接调用.我无法更改分屏的视图的调用顺序.我怎样才能解决这个问题?

更新:

我可以在显示拆分视图控制器之前设置它:

splitViewController.preferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible
Run Code Online (Sandbox Code Playgroud)

在我打印时,在分割控制器的ViewDidLoad中:

print(self.preferredDisplayMode.rawValue)
Run Code Online (Sandbox Code Playgroud)

我得到:2,这是AllVisible.但结果仍然相同.

ipad uisplitviewcontroller ios swift swift2

10
推荐指数
1
解决办法
799
查看次数

在iPad iOS 13上启动时,UISplitViewController无法正确折叠

我正在将应用程序过渡到iOS 13,并且UISplitViewController折叠到详细信息视图上,而不是在启动时折叠到主视图上-仅在iPad上。此外,后退按钮也没有显示-好像它是根视图控制器一样。

我的应用程序包含一个UISplitViewController已被子类化的,符合UISplitViewControllerDelegate。拆分视图包含两个子视图-两者都UINavigationControllers嵌入到UITabBarController(子类TabViewController)中

在拆分视图中viewDidLoad,委托设置为selfpreferredDisplayMode并且设置为.allVisible

由于某种原因,splitViewController(_:collapseSecondary:onto:)未调用该方法。

iOS版12iPhoneiPad上,该方法splitViewController(_:collapseSecondary:onto:)被正确调用的推出,之间application(didFinishLaunchingWithOptions)applicationDidBecomeActive

iPhone上的iOS 13中,该方法在启动时在和之间正确调用。splitViewController(_:collapseSecondary:onto:)scene(willConnectTo session:)sceneWillEnterForeground

的iOS 13的iPad,然而,如果该窗口具有发射例如为分割视图中创建新的场景紧凑的宽度,该splitViewController(_:collapseSecondary:onto:)方法没有在所有调用。仅在将窗口扩展到常规宽度然后收缩时才调用该方法。

class SplitViewController: UISplitViewController, UISplitViewControllerDelegate {
override func viewDidLoad() {
        super.viewDidLoad()
        self.delegate = self
        preferredDisplayMode = .allVisible
}

func splitViewController(_ splitViewController: UISplitViewController, collapseSecondary secondaryViewController:UIViewController, onto …
Run Code Online (Sandbox Code Playgroud)

ipad uisplitviewcontroller ios swift ios13

10
推荐指数
1
解决办法
950
查看次数