Xcode单一窗口,显示来自xib文件的自定义视图

2023-11-30

我正在创建一个 OSX 应用程序,它有一个窗口。该窗口包含一个视图,在整个使用过程中呈现不同的视图。

我目前的做法:

  • 在默认的 MainMenu.xib 中,我在默认生成的窗口(这是我将使用的窗口)中为自定义视图创建了一个出口。我们就这样称呼它吧MainView.

  • 我创建了一个视图控制器,带有一个 xib 文件。在 xib 中,我为其创建了一个视图和一个出口。我们就这样称呼它吧CustomView1。稍后我将在此视图控制器中拥有多个视图。

  • In AppDelegate.h我导入了视图控制器,并将其分配如下:@property (strong, nonatomic) MasterViewController *masterViewController;

  • In AppDelegate.m in applicationDidFinishLaunching我尝试显示自定义视图:_MainView = _masterViewController.CustomView1;

目前这会导致一个空窗口。我怀疑我以错误的方式处理这件事。做这个的最好方式是什么?


您的错误是您最初没有显示您的第一个视图。这是我学习如何在窗口中交换视图的方法。这是否是最好的方法,不取决于我。您的方法的不同之处在于您应该将视图与窗口分离。可能还有更好的方法,但官方教授的是以下方法。

使用 mainmenu.xib 作为窗口控制器。在窗口中拖放一个框并将框边框设置为“无”。您将有一个看不见的盒子,它将成为您的视图的容器。

创建任意数量的视图控制器以获得不同的视图。当然,这是通过创建一个新类作为 NSViewController 的子类来实现的。在你的主类(可能是 appDelegate,但也可以是其他类)中,你至少创建一个 NSBox 的 IBOutlet(你在主窗口中放置的框)和一个视图控制器数组。后者将包含您要显示的所有视图。

这是一个向您展示其工作原理的简单示例:

appDelegate.h 包含以下声明:

@interface AppDelegate : NSObject <NSApplicationDelegate>


@property (weak) IBOutlet NSButton *swapViewButton;
@property (weak) IBOutlet NSBox *viewBox;
@property NSMutableArray *viewControllers;
@property NSUInteger currentView;

-(IBAction)swapViewOnButtonclick:(id)sender;
-(void)displayViewController:(NSViewController *)vc;

@end

appDelegate.m 包含以下方法:

#import "AppDelegate.h"
#import "FirstViewController.h"
#import "SecondViewController.h"

@interface AppDelegate ()

@property (weak) IBOutlet NSWindow *window;
@end

@implementation AppDelegate

@synthesize viewControllers;
@synthesize currentView;

-(id)init
{
    self = [super init];
    if(self)
    {
        viewControllers = [[NSMutableArray alloc]init];

        NSViewController *vc;

        vc = [[SecondViewController alloc]init];
        [viewControllers addObject:vc];

        vc = [[FirstViewController alloc]init];
        [viewControllers addObject:vc];
    }

    NSLog(@"The number of views in the view controller array is: %ld.\n", [viewControllers count]);
    return self;
}

-(void)displayViewController:(NSViewController *)vc
{
    NSWindow *w = [_viewBox window];
    BOOL ended = [w makeFirstResponder:w];
    if(!ended)
    {
        NSBeep();
        return;
    }

    NSView *v = [vc view];
    [_viewBox setContentView:v];
}


-(IBAction)swapViewOnButtonclick:(id)sender
{
    if(!currentView)
    {
        currentView++;
    }else
    {
        currentView = 0;
    }
    NSLog(@"Current view is: %ld.\n", currentView);
    NSViewController *vc = [viewControllers objectAtIndex:currentView];
    [self displayViewController:vc];
}

-(void)awakeFromNib
{
    currentView = 0;
    [self displayViewController:[viewControllers objectAtIndex:currentView]];
}

@end

视图控制器类似,只是示例中有一个初始值设定项。我在视图上放置了一个文本标签,其中包含文本“第一/第二视图”。当然,这只是视图交换如何工作的一个示例。您可以根据应用程序的需要将其变得尽可能复杂。希望这可以帮助。

MacUserT

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Xcode单一窗口,显示来自xib文件的自定义视图 的相关文章

  • 我如何获取用户的电子邮件? iPhone SDK

    我需要获取 Mail app 中使用的用户的电子邮件地址 如何使用 iPhone SDK 做到这一点 谢谢你 简短的回答 你不能 如果需要 您应该提示用户输入电子邮件地址
  • 如何在iOS应用程序中捕获用户的手写签名[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 在我的应用程序中 用户将请求客户提供数字化的手写签名 我需要能够在用户在触摸屏上 书写 签名时捕获签名
  • Mac 上的 Qt — 如何访问帮助菜单中的“搜索”

    我正在将我的 Qt 应用程序移植到 Mac OS X 在 Windows Linux 上 我使用 QLineEdit 在帮助菜单中提供搜索功能 In Mac OS X I saw something like this is built i
  • iPad - 无法在框架内滚动

    我无法滚动 iPad Safari 中框架内调用的 pdf 我已经尝试过两件事 2 指滚动 使用对象 嵌入代替框架 但这是行不通的 事实上我已经尝试了很多东西 溢出 高度等等 请帮我 先感谢您 根据这篇文章http support appl
  • CBPeripheral 名称有时为 null

    我正在开发一个应用程序来与蓝牙 LE 外围设备进行通信 我目前正在测试的外围设备是其中之一these http www ti com tool cc2540dk mini 有趣的是 有时当我发现它时 我会得到它的正确名称 SimpleBLE
  • ViewWillAppear 没有被 UISplitViewController 调用

    背景和目标 我有一个基于 UISplitViewController 的 iPad 应用程序 到目前为止它支持 4 个方向 但现在我想将其锁定为仅横向 我变了shouldAutorotateToInterfaceOrientation左视图
  • 多次添加同一个子视图来查看

    我不知道这是否可行 但我想做的是将子视图多次添加到视图中 我尝试过这样的事情 self view addSubview newView newView center CGPointMake 160 100 self view addSubv
  • 无法将“SDWebImageActivityIndi​​cator”类型的值分配给“ST_SDWebImageIndicator”类型?

    I have multiple flavours targets in my Xcode project I am also using SDWebImage in my app Everything was working fine un
  • “同时创建 xib 文件”按钮已禁用

    我在创建时遇到这个问题UIView s子类 创建 例如 UIViewControllers or UITableViewCells没关系 为什么会出现这种情况 I create view using cmd N and Xcode Vers
  • iOS Storyboards 我应该使用它们吗? [复制]

    这个问题在这里已经有答案了 我是 iOS 开发新手 尚未创建应用程序 但我向我的朋友寻求建议 他在市场上拥有非常高评价的应用程序 他说不要使用故事板 尽管我很想听取他的建议 但它们似乎确实很有帮助 这是否会在将来给我的应用程序带来问题 我有
  • 如何快速更改按钮图像?

    我正在开发一个有按钮的应用程序 该按钮没有文本 图像或背景 所以我想做的就是在viewDidLoad函数中给它一个图像 这就是我所拥有的 IBOutlet var tapButton UIButton override func viewD
  • iOS 11 安全区域布局指南向后兼容性

    启用安全区域布局指南是否与 iOS 11 以下版本兼容 我设法使用新的安全区域布局指南并保持与 iOS 9 和 iOS 10 的向后兼容性 编辑 正如 NickEntin 的评论所指出的 此实现将假定存在状态栏 但在 iPhone X 的横
  • 玻璃效果 UIView

    我想知道如何在 UIView 上添加玻璃效果 我想像这样的效果 http pttrns com pickers detail 0dc9d9f6c6a7577613b3453768eee3b3在灰色半透明视图上 您 可以在这里看到 Thank
  • 如何检测Retina高清显示屏?

    UIScreen有一个新的 nativeScaleiOS 8 中的属性 但文档没有提及它 property nonatomic readonly CGFloat nativeScale 还有一个scale属性 但文档说它是 2 用于视网膜显
  • 确定 NSView 是否绘制的正确方法

    有没有正确的方法来确定是否NSView实际上是否在当前视图层次结构中绘制 考虑以下情况 视图完全在屏幕外 不是强制性的 该视图不在视图层次结构的顶部 The isHidden and isHiddenOrHasHiddenAncestor不
  • 当所选选项是下拉列表中已选择的选项时如何接收事件?

    动机 我想动态加载一个select使用来自 AJAX 调用的值 并允许用户select加载后列表中的第一项after它获得焦点 现在 第一项是selected项目 当您单击下拉列表并单击第一项时 什么也没有发生 我无法添加任何无效选择的占位
  • PrepareForSegue之谜

    我在两个不同的 VC 中有一个prepareForSegue 方法 一个使用一个if声明 而另一个旨在使用switch 除了名称之外 代码几乎相同 这个效果很好 void prepareForSegue UIStoryboardSegue
  • 我可以知道 requireGestureRecognizerToFail 到底会做什么吗?

    谁能告诉我下面的代码行到底会做什么 我已经提到过Apples https developer apple com library ios documentation uikit reference UIGestureRecognizer C
  • 我什么时候应该对 IBOutlet 使用弱或强限定符? [复制]

    这个问题在这里已经有答案了 可能的重复 ARC 下 IBOutlets 应该强还是弱 https stackoverflow com questions 7678469 should iboutlets be strong or weak
  • xcode 6.1 (Swift) 中的 SIGABRT 运行时错误

    与最初的代码相比 唯一的更改是在ViewControl swift override func viewDidLoad newMessage hidden true super viewDidLoad Do any additional s

随机推荐

  • 添加文档时 MongoDB 游标是否“自动增长”

    我正在使用 MongoDB 游标来查找大量文档 这需要相当长的时间 如果在此期间 数据库中添加了与光标的搜索条件相匹配的文档 会发生什么情况 光标会返回文档吗 或者游标在开始时是否会拍摄某种快照 从而忽略后来添加的结果 光标会返回文档吗 是
  • 如何通过缩放视野来始终保持 2 个物体在视野中​​? (或 z&y 轴)

    我正在为 2 名玩家制作一个小型街机射击游戏 并且需要将屏幕聚焦于 2 名玩家 我让相机在 X 轴的玩家中心移动 但我认为当 2 名玩家玩家之间的距离越来越近 镜头也越来越近 This is the perspective pov 移动相机
  • 如何部署 Outlook 宏?

    我做了一个 Outlook 宏 我如何部署它以在其他机器上使用它 我是否遵循在我的机器上执行的相同步骤 工具 gt 宏 gt 创建新项目 还是有其他方法可以像我们处理 vb 或 C 项目一样进行部署 不 您不需要遵循相同的步骤并从头开始重新
  • 获取 data.frame 中各组的平均值和标准差

    我的心率数据以列表的形式存在 其中有四个类别 1AS 1CS 1AI 1CI 每个类别的大小各不相同 我想输出列表中每个类别的平均值和标准差 我有这种格式的数据来计算方差分析和图基 我已经成功完成了 但平均值让我难住了 Group HR 1
  • while循环和线程的无限循环问题[重复]

    这个问题在这里已经有答案了 使用一个基本示例来说明我的问题 我有 2 段几乎相同的代码 这段代码会导致while循环无限运行 private boolean loadAsset new Thread new Runnable Overrid
  • Oracle 序列:此处不允许使用 CURRVAL?

    以下 Oracle SQL 代码生成错误 ORA 02287 此处不允许序列号 INSERT INTO Customer CustomerID Name VALUES Customer Seq nextval AAA SELECT FROM
  • array() 无法识别列名参数

    在 R 中 我使用dplyr更具体地说arrange 不知何故arrange功能未按预期工作 在下面的示例中 我首先存储列的名称 然后将此变量作为参数传递给名为 my function 的自定义函数 target column mean a
  • Facebook SDK 共享始终返回 sharerDidCancel [重复]

    这个问题在这里已经有答案了 我尝试使用 Facebook SDK 分享帖子 但无论是分享还是取消帖子 总是会调用 sharerDidCancel 这是我的代码 void shareFacebook FBSDKShareLinkContent
  • 在多个浏览器中测试/检查网络应用程序的软件/工具?

    我正在创建一个网站 我想使用自动化测试工具自动检查多个浏览器以进行浏览器兼容性测试 你们知道是否有任何软件 工具 我可以只提供一个链接 然后在多个浏览器中加载页面 我用过浏览器截图之前 如果你不介意等一两个小时也没关系 我还建议您查看一些链
  • 内部类出现“范围内没有类型 file1 的封闭实例”错误

    我有一些代码 本质上它导入了另一个类 它有一个我试图访问的内部类 但它提出了这个错误 file2 java 5 error no enclosing instance of type file1 is in scope public sta
  • 使用 Java 访问 Android Manifest 属性

    这是清单示例 是否可以从 Java 访问属性 versionCode 和 versionName 如何
  • 写入有符号整数就像在 C++ 中写入无符号整数一样

    Is reinterpret cast这样做是安全的 这是最好的方法吗 例如 在下面的代码中 我有一个名为ibytestream 这允许读取uint16 ts and int16 t是从它 ibytestream next is a vec
  • 如何使用纯 javascript 将子级附加到具有指定类名的所有节点

    var menuheader document createElement li document getElementsByClassName subMenu appendChild menuheader 上面是代码片段 我收到此错误 f
  • NetBeans 12.6 的 TAB 和缩进问题

    交易是这样的 如果我在一行代码中使用 TAB 键 效果很好 我按下它 它会正常插入空格 如果我转到一个新行 一个没有代码的空行 它就不起作用 无论 像这样 System out pri nt 这是第一个问题 第 2 号 缩进 如果我在任意位
  • 在 jquery datetimepicker 中设置最大和最小日期时间

    我正在使用jquery datetimepicker 我想在其中设置mindate和时间 这是在第二个datetimepicker中选择的值 我尝试的是 date start datetimepicker autoSize true cha
  • 在运行时检查 Python 模块版本

    许多第三方 Python 模块都有一个属性 用于保存模块的版本信息 通常类似于module VERSION or module version 但有些则不然 此类模块的具体示例是 libxslt 和 libxml2 我需要检查运行时是否使用
  • 为什么这个 BASH 数组没有构建?

    为什么这个 bash 数组没有填充 我相信我过去也这样做过 回声 XECOMMAND 显示无数据 DIR 1 TEMPFILE tmp dir tmp ls l DIR tail n 2 sed s s g cut d f5 9 gt TE
  • 为什么这个嵌套的 content_tag 无法正确呈现?

    我的助手中有这个 def favorites count node content tag span class card favorite count do content tag i class icon heart node cach
  • 如何有选择地更新 wpf 中的模型

    当单击 listviewitem 时 我会在列表视图中显示模型列表 我打开一个绑定到 listviewitem 数据模型的对话框 并允许用户编辑各种属性 我正在尝试弄清楚如何处理 确定 和 取消 按钮 一方面 如果我将对话框直接绑定到列表视
  • Xcode单一窗口,显示来自xib文件的自定义视图

    我正在创建一个 OSX 应用程序 它有一个窗口 该窗口包含一个视图 在整个使用过程中呈现不同的视图 我目前的做法 在默认的 MainMenu xib 中 我在默认生成的窗口 这是我将使用的窗口 中为自定义视图创建了一个出口 我们就这样称呼它