由于Xcode 6仍然有很多Swift漏洞,我不确定它是一个还是我遗漏了一些东西.我的类采用协议NSLayoutManagerDelegate.但似乎不可能覆盖我需要的方法.我做文件描述:
override func layoutManager(_ aLayoutManager: NSLayoutManager!,
didCompleteLayoutForTextContainer aTextContainer: NSTextContainer!,
atEnd flag: Bool) {
}
Run Code Online (Sandbox Code Playgroud)
但是我在这里得到错误:方法不会覆盖其超类中的任何方法.我该怎么办?
请帮助理解这里的错误.我已经尝试了Xcode 6.0.1和Xcode 6.1 beta 2.我有一个简单的扩展.
extension UIImage {
func saturate (toLevel level : Float) -> UIImage {
// create filter
let saturationFilter = CIFilter(name: "CIColorControls")
saturationFilter.setValue(self.CIImage, forKey: kCIInputImageKey)
saturationFilter.setValue(NSNumber.numberWithFloat(level), forKey: "inputSaturation")
// create context
let context = CIContext(options: nil)
// render image with filter
ERROR: let renderedImage = saturationFilter.valueForKey(kCIOutputImageKey) as CIImage
let imageRef = context.createCGImage(renderedImage, fromRect: renderedImage.extent())
return UIImage(CGImage: imageRef)
}
}
Run Code Online (Sandbox Code Playgroud)
但编译器说"使用未声明的类型'CIImage'".我勒个去?我试图导入CoreImage,但没有任何改变
我正在尝试为 NSTextView 支持的核心数据做一些重要的工作。我想在我的核心数据模型中存储而不是整个 NSTextStorage,而是将它分成多个段落并将这些段落保存在单独的实体中。
事实上,我得到了这一切。但我无法处理撤消/重做支持。如果我在 TextDidChange 通知或其他内容中存储每个更改,我基本上会失去 NSTextView 的撤消支持,因为 Core Data 开始存储确实进入文本存储的每个字符。因此,撤消管理器会单独注册这些操作。当我撤消时,我只能逐个字符地撤消,这不是我想要的。如果我不在 Core Data 中存储输入的文本,textview 的撤消管理工作正常。
我如何知道撤消管理器何时开始并关闭一组操作,以便仅在关闭组时才能存储更改?
我试图观察 NSUndoManagerDidCloseUndoGroupNotification 的 NSUndoManager 但它没有帮助,因为我在每个字符输入期间都会收到该通知,并且仍然会遇到令人讨厌的逐字符撤消行为。
甚至有可能获得解决方法吗?
更新:在更新核心数据实体时,我能够通过 disableUndoRegistration() 实现我的目标。但我想知道是否还有其他解决方案。
macOS 11 Big Sur 在其当前迭代(beta 1 到 beta 6)中有一个错误/功能,这使得很难将 NSMenuItem 与自定义视图一起使用。具体来说,当菜单项突出显示时,项目的自定义视图不会调用 draw(dirtyRect:)。
我设法通过 NSMenu 委托手动调用 draw(dirtyRect:) 方法来绕过该错误:
func menu(_ menu: NSMenu, willHighlight item: NSMenuItem?) {
if #available(OSX 11.0, *) {
// fix for bug when an item with custom view won't be called to draw the highlighting state
menu.items.filter{ $0.tag == 101 }.forEach{ $0.view?.needsDisplay = true }
}
}
Run Code Online (Sandbox Code Playgroud)
但这并不能解开绘制状态的奥秘。MacOS 11 Big Sur 具有新的 UI 外观。菜单项现在以不同的方式突出显示,其内容周围带有圆形框。
我的问题是:我应该手动模拟那个圆形框,还是在新的 App Kit 中有一些默认方式来绘制圆形的菜单项选择?
换句话说,在 macOS 11 Big Sur 中使用自定义视图的 NSmenuItem 的最佳方法是什么?
我正在尝试显示不可见的字符,例如 NSTextView 子类中的换行符。像重写 NSLayoutManager 的 drawGlyph 方法这样的常用方法是一个坏主意,因为它太慢并且不能正常工作于多页布局。
\n\n我想要做的是重写 NSLayoutManager 的 setGlyph 方法,以便它将不可见的“\\n”字形替换为“\xc2\xb6”字形,将“ ”替换为“\xe2\x88\x99”。
\n\n它适用于“ ”空格字形,但对新行字符没有影响。
\n\npublic override func setGlyphs(_ glyphs: UnsafePointer<CGGlyph>, properties props: UnsafePointer<NSGlyphProperty>, characterIndexes charIndexes: UnsafePointer<Int>, font aFont: Font, forGlyphRange glyphRange: NSRange) {\n var substring = (self.currentTextStorage.string as NSString).substring(with: glyphRange)\n\n // replace invisible characters with visible\n if PreferencesManager.shared.shouldShowInvisibles == true {\n substring = substring.replacingOccurrences(of: " ", with: "\\u{00B7}")\n substring = substring.replacingOccurrences(of: "\\n", with: "u{00B6}")\n }\n\n // create a CFString\n let stringRef = substring as CFString\n let …Run Code Online (Sandbox Code Playgroud) 找不到任何线索来管理它。
默认情况下,NSTextView选择突出显示其文本容器的整个大小。它忽略行距,头或尾缩进等。但是在Pages应用程序选择中不突出显示那些辅助部分,它仅突出显示字符。即使文本容器的高度较小(前后段落间距),它也会突出显示行的所有高度。
我想实现这种行为,但不知道从哪里开始。我在这里搜索过,我在搜索过Apple文档,还尝试过示例项目。没有。
也许有人可以指引我正确的方向?谢谢!
我正在尝试对Array类型进行扩展,以便能够使用2D数组.事实上,我在Objective-C中做到了这一点,下面的代码就像一个魅力.但我真的陷入了斯威夫特.
extension Array {
mutating func addObject(anObject : AnyObject, toSubarrayAtIndex idx : Int) {
while self.count <= idx {
let newSubArray = [AnyObject]()
self.append(newSubArray)
}
var subArray = self[idx] as! [AnyObject]
subArray.append(anObject)
}
func objectAtIndexPath(indexPath : NSIndexPath) -> AnyObject {
let subArray = self[indexPath.section] as! Array
return subArray[indexPath.row] as! AnyObject
}
Run Code Online (Sandbox Code Playgroud)
}
无论我做什么,我都会收到代码示例中提到的错误.我很感激任何帮助.谢谢.
更新感谢Roman Sausarnes
正确的代码是这样的:
extension Array where Element: _ArrayType, Element.Generator.Element: AnyObject {
mutating func addObject(anObject : Element.Generator.Element, toSubarrayAtIndex idx : Int) {
while self.count <= idx {
let …Run Code Online (Sandbox Code Playgroud) 在 UIKit 和 SwiftUI 中,工作表或警报会在其显示的视图中使标准颜色变暗。在显示警报/工作表期间,该视图中的每种颜色都是灰度的。
如何同时调暗 SwiftUI 视图的非标准颜色?我使用自己的颜色,默认情况下它们不会变暗。
swift ×7
cocoa ×4
ios ×3
appkit ×2
objective-c ×2
xcode ×2
arrays ×1
cocoa-touch ×1
core-data ×1
custom-view ×1
macos ×1
nsmenu ×1
nsmenuitem ×1
nstextview ×1
swiftui ×1