小编Vit*_*nko的帖子

Swift协议:方法不会覆盖其超类中的任何方法

由于Xcode 6仍然有很多Swift漏洞,我不确定它是一个还是我遗漏了一些东西.我的类采用协议NSLayoutManagerDelegate.但似乎不可能覆盖我需要的方法.我做文件描述:

override func layoutManager(_ aLayoutManager: NSLayoutManager!,
        didCompleteLayoutForTextContainer aTextContainer: NSTextContainer!,
        atEnd flag: Bool) {

    }
Run Code Online (Sandbox Code Playgroud)

但是我在这里得到错误:方法不会覆盖其超类中的任何方法.我该怎么办?

cocoa nslayoutmanager swift

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

'CIImage是未声明类型'的奇怪错误

请帮助理解这里的错误.我已经尝试了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,但没有任何改变

xcode ios swift

15
推荐指数
3
解决办法
2915
查看次数

核心数据 + NSTextView + 撤消管理器

我正在尝试为 NSTextView 支持的核心数据做一些重要的工作。我想在我的核心数据模型中存储而不是整个 NSTextStorage,而是将它分成多个段落并将这些段落保存在单独的实体中。

事实上,我得到了这一切。但我无法处理撤消/重做支持。如果我在 TextDidChange 通知或其他内容中存储每个更改,我基本上会失去 NSTextView 的撤消支持,因为 Core Data 开始存储确实进入文本存储的每个字符。因此,撤消管理器会单独注册这些操作。当我撤消时,我只能逐个字符地撤消,这不是我想要的。如果我不在 Core Data 中存储输入的文本,textview 的撤消管理工作正常。

我如何知道撤消管理器何时开始并关闭一组操作,以便仅在关闭组时才能存储更改?

我试图观察 NSUndoManagerDidCloseUndoGroupNotification 的 NSUndoManager 但它没有帮助,因为我在每个字符输入期间都会收到该通知,并且仍然会遇到令人讨厌的逐字符撤消行为。

甚至有可能获得解决方法吗?

更新:在更新核心数据实体时,我能够通过 disableUndoRegistration() 实现我的目标。但我想知道是否还有其他解决方案。

cocoa core-data objective-c swift

5
推荐指数
1
解决办法
446
查看次数

macOS 11 Big Sur 中带有自定义视图的 NSMenuItem

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 的最佳方法是什么?

nsmenu appkit custom-view nsmenuitem macos-big-sur

5
推荐指数
0
解决办法
254
查看次数

无论我做什么,NSLayoutManager 都会隐藏新行字符

我正在尝试显示不可见的字符,例如 NSTextView 子类中的换行符。像重写 NSLayoutManager 的 drawGlyph 方法这样的常用方法是一个坏主意,因为它太慢并且不能正常工作于多页布局。

\n\n

我想要做的是重写 NSLayoutManager 的 setGlyph 方法,以便它将不可见的“\\n”字形替换为“\xc2\xb6”字形,将“ ”替换为“\xe2\x88\x99”。

\n\n

它适用于“ ”空格字形,但对新行字符没有影响。

\n\n
public 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)

cocoa cocoa-touch nslayoutmanager appkit swift

4
推荐指数
1
解决办法
2077
查看次数

NSTextView选择突出显示所有字符,甚至段落缩进

找不到任何线索来管理它。

默认情况下,NSTextView选择突出显示其文本容器的整个大小。它忽略行距,头或尾缩进等。但是在Pages应用程序选择中不突出显示那些辅助部分,它仅突出显示字符。即使文本容器的高度较小(前后段落间距),它也会突出显示行的所有高度。

我想实现这种行为,但不知道从哪里开始。我在这里搜索过,我在搜索过Apple文档,还尝试过示例项目。没有。

也许有人可以指引我正确的方向?谢谢!

macos cocoa objective-c nstextview swift

3
推荐指数
1
解决办法
558
查看次数

Swift二维数组扩展错误

我正在尝试对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)

arrays xcode multidimensional-array ios swift

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

如果出现警报/工作表,则使 SwiftUI 视图灰度化

在 UIKit 和 SwiftUI 中,工作表或警报会在其显示的视图中使标准颜色变暗。在显示警报/工作表期间,该视图中的每种颜色都是灰度的。

如何同时调暗 SwiftUI 视图的非标准颜色?我使用自己的颜色,默认情况下它们不会变暗。

ios swift swiftui

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