我有一个带有菜单栏图标和状态菜单的非文档 Cocoa 应用程序。我在 Interface Builder 的状态菜单中添加了一个“打开最近的”菜单。填充菜单工作得很好:
[[NSDocumentController sharedDocumentController] noteNewRecentDocumentURL:
[NSURL fileURLWithPath:filename]]
Run Code Online (Sandbox Code Playgroud)
现在我还想在上下文弹出菜单中添加第二个“打开最近”菜单。我将如何以编程方式创建菜单,以便像状态菜单中的版本一样自动填充条目?
我尝试在状态菜单中创建一个副本,但它没有被填充。我假设 NSDocumentController 不知道菜单(坦率地说,我不知道它是如何知道状态菜单中的)。
想象一下CALayer
在其父图层的左下角绘制的一个小红框(实例)(它是图层托管的根层NSView
).
当父视图的框架发生变化时,红色框应保持在屏幕上的相同位置.我这样做是通过调整它相对于父视图左下角的位置来实现的.
问题是在某些情况下会出现闪烁,我可以看到红框图层在扩展框架的左下角被绘制,然后显示在正确的位置.
我认为将框架和位置变换包装CATransaction
在一起会使两个变化在一起,但这并不总是有效(文档说通过使用事务动画将同时开始,但似乎仍然存在竞争条件有时).
如何NSView
在保持子图层处于感知位置的同时调整父级的框架?
示例和代码:
我自己的想法:
隐藏红色框图层,更新位置,再次显示
使用约束将其绑定到右角.问题是这个偏移也可能会改变,我将不得不更新可能导致同样闪烁问题的约束.
我有一个自定义NSTableRowView
实现来显示我的数据单元格.该表还包含使用简单的组行NSTextField
.
在我的自定义行视图中,我需要稍微更改底部分隔符的绘图,具体取决于下面的下一行是数据单元格(即我的自定义行)还是组标题.
在组头的情况下,我不必绘制分隔符,否则我最终会得到一个2px分隔符,如屏幕截图所示.
有没有办法从下一个(或上一个)NSTableRowView
实例获取引用[NSTableRowView drawBackgroundInRect:...]
?
我正在尝试创建一个类似于Finder文件标签的文本字段.我希望最后(第二)行在中间被截断.
我从一个多线开始NSTextField
.
但是,[self.cell setLineBreakMode:NSLineBreakByTruncatingMiddle];
在文本字段中调用结果只显示一条截断的行(不再有换行符).
这是Finder中的样子:
我有一个NSTextField
根据用户操作设置为可编辑的。我想在用户单击窗口内文本字段之外的任何位置时结束编辑。
看起来很简单,但我无法让它发挥作用。我实现了controlTextDidEndEditing
和textDidEndEditing
,但没有运气,特别是当我单击不接受第一响应者状态的用户界面元素时。
我有一个基本的Cocoa应用程序,可以让用户管理文件列表。通过拖放添加文件,并且在应用程序重新启动期间,我将访问权限保留在安全的书签中。
到目前为止,一切都很好。允许该应用读取和写入用户的文件,但是重命名失败并出现权限错误,声称不允许我的应用访问父文件夹。
码:
[[NSFileManager defaultManager] moveItemAtPath:currentPath
toPath:newPath error:&error]
Run Code Online (Sandbox Code Playgroud)
错误:
Error Domain=NSCocoaErrorDomain Code=513 "“Some image.jpg” couldn’t
be moved because you don’t have permission to access “some folder”
Run Code Online (Sandbox Code Playgroud)
我发誓这只在昨天才起作用,但没有任何变化。我假设如果用户允许通过“打开”对话框访问文件或拖放文件,则应允许沙盒应用程序重命名文件。
我有一个基本的主 - 细节应用程序.根据在主列表中选择的项目,我只想tintColor
在详细信息视图中设置导航栏.
我设置了这样的色调颜色:self.navigationController.navigationBar.tintColor = detailTintColor;
在viewWillAppear:
细节控制器中.
但是,这也会将主控制器导航栏的颜色更改为黄色(应保持红色),这在过渡动画期间可见为闪烁.我假设因为只有一个导航栏实例.
这里有一个截图来说明问题:
我正在尝试重新创建Xcode中使用的分段控件,其中图像是用蓝色色调绘制的.
例如在Interface Builder中:
到目前为止,我有一个自定义NSSegmentedCell
覆盖- (void)drawSegment:(NSInteger)segment inFrame:(NSRect)frame withView:(NSView *)controlView
,但我坚持如何绘制带有灰色色调的段图像(1)和(2)如果选择了蓝色色调.
此外,它看起来像是用边框或渐变效果绘制的.当我自己绘制段图像时,它只是黑色(因为我使用模板图像).
如何从上方重新创建片段?
我的iOS应用在生产时崩溃UIDocument.revert(toContentsOf url: URL,
completionHandler: ((Bool) -> Void)? = nil)
。从错误消息看,好像该文档应该被还原到其自身。例如:
**** Terminating app due to uncaught exception
'NSInternalInconsistencyException',
reason: 'attempt to revert document at URL (
file:///private/var/mobile/Library/Mobile%20Documents/
iCloud~com~myapp/Documents/sampledocument.test)
to URL (
file:///private/var/mobile/Library/Mobile%20Documents/
iCloud~com~myapp/Documents/sampledocument.test)
that is not yet open'
Run Code Online (Sandbox Code Playgroud)
我没有任何特定的代码来还原文档版本,而且我自己也无法重现此版本,但是它对许多用户来说都是这样。
UIDocument会尝试还原其内容,为什么会尝试将同一文件还原为其自身?
这可能是关闭文档但由于某种原因试图放弃更改的竞争条件吗?
是否可以使用 HTML 和 CSS 创建一个两列的多页布局,如本模型所示,其中内容自动从 1 流出?2 ? 3 ? 4 ? ……?
我正在构建一个电子书阅读器/编写器。本质上,布局类似于 Word 或 Pages 等桌面文字处理应用程序的布局:
我试验了 CSS 多列布局模块¹。获得两列是直接的,但我无法弄清楚如何在视口高度“分解”为多个“两列”布局,每组“左右”页面一个。
澄清:
内容基本上是一大块<div contenteditable="true">
。它的内容需要自动跨页面流动。
<div id="bookeditor" contenteditable="true">
Book contents go here...
Wrap from page to page, from row to row...
</div>
Run Code Online (Sandbox Code Playgroud)
1:https : //developer.mozilla.org/en-US/docs/Web/CSS/CSS_Columns/Using_multi-column_layouts
cocoa ×6
ios ×2
nstextfield ×2
calayer ×1
contextmenu ×1
css ×1
html ×1
menubar ×1
nstableview ×1
nsview ×1
objective-c ×1
tintcolor ×1
uidocument ×1
xcode ×1