小编iph*_*aaw的帖子

OSX:基于视图的表视图中的对象可能只能连接到表视图的委托

我已经设置了一个带有嵌入式NSTableView的NSView.

在此输入图像描述

我试图为对表视图单元格进行更改时运行NSTableViewCell的操作:

import Cocoa

class MyView: NSView
{
    override func drawRect(dirtyRect: NSRect)
    {
        super.drawRect(dirtyRect)
    }

    @IBAction func valEntered2(sender: AnyObject)
    {
        Swift.print("valueEntered2")
    }
}
Run Code Online (Sandbox Code Playgroud)

虽然这种方法在故事板上使用NSViewController之前已经运行良好,但是当我编译此代码时它会发出警告:

由'Table View Cell'发送的动作'valEntered2:'连接到'View',一个无效的目标(基于视图的对象内部表视图,它们只连接到表视图的委托.)

所以它似乎不喜欢NSView中的动作所以我已经将NSTableView子类化了,所以我可以将它移动到那里:

class MyTable: NSTableView, NSTableViewDataSource, NSTableViewDelegate
{
    let appDelegate = NSApplication.sharedApplication().delegate as! AppDelegate

    override init(frame frameRect: NSRect)
    {
        super.init(frame: frameRect)
    }

    required init?(coder: NSCoder)
    {
        super.init(coder: coder)
        self.setDataSource(self)
        self.setDelegate(self)
    }

    override func drawRect(dirtyRect: NSRect)
    {
        super.drawRect(dirtyRect)
    }

    func numberOfRowsInTableView(tableView: NSTableView) -> Int
    {
        return 5
    }

    func tableView(tableView: NSTableView, viewForTableColumn tableColumn: NSTableColumn?, row: …
Run Code Online (Sandbox Code Playgroud)

macos nsview nstableview swift

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

Elixir:在if语句中设置变量

我是Elixir的新手,这个简单的问题让我疯狂.

a = 0
if true do
    a = 1 + 1
end 
a = a + 1

IO.puts (a)
Run Code Online (Sandbox Code Playgroud)

有趣的是,这给出了正确的值,但也给出了警告:

warning: the variable "a" is unsafe as it has been set inside a case/cond/receive/if/&&/||. Please explicitly return the variable value instead. For example:

case int do
  1 -> atom = :one
  2 -> atom = :two
end

should be written as

atom =
  case int do
    1 -> :one
    2 -> :two
  end

Unsafe variable found at:
  Untitled:5

3 …
Run Code Online (Sandbox Code Playgroud)

elixir

7
推荐指数
3
解决办法
4798
查看次数

在Swift中打开新窗口

我试图在我的Swift应用程序中打开一个新窗口,但我无法打开它.

class AppDelegate: NSObject, NSApplicationDelegate 
{
    func applicationDidFinishLaunching(aNotification: NSNotification)
    {
        openMyWindow()
    }

    func openMyWindow()
    {
        if let storyboard = NSStoryboard(name: "Main",bundle: nil)
        {
            if let vc = storyboard.instantiateControllerWithIdentifier("MyList") as? MyListViewController
            {
                var myWindow = NSWindow(contentViewController: vc)
                myWindow.makeKeyAndOrderFront(self)
                let controller = NSWindowController(window: myWindow)

                controller.showWindow(self)

            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我在IB中设置了Storyboard ID.

我已经跟踪了代码,它确实进入了窗口打开代码,但它没有做任何事情.

顺便说一句,我确实有一个默认的故事板入口点设置,默认窗口打开确定但我需要打开第二个窗口,这是不起作用的.

macos cocoa storyboard nswindow swift

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

Elixir:无法访问struct

我正试图让结构工作,但互联网或印刷书籍上没有任何记录的例子.

网站上的这个例子(https://www.tutorialspoint.com/elixir/elixir_structs.htm)也显示了同样的问题:

defmodule User do
   defstruct name: "John", age: 27
end

john = %User{}

#To access name and age of John, 
IO.puts(john.name)
IO.puts(john.age)
Run Code Online (Sandbox Code Playgroud)

我得到错误无法访问struct User,结构尚未定义或结构正在定义它的相同上下文中访问.

struct elixir

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

Swift 取消 DispatchQueue 过程

我有一个 UDP 方法,它使用以下代码使用 DispatchQueue 等待回复:

DispatchQueue.global(qos: .userInitiated).async {
    let server:UDPServer=UDPServer(address:"0.0.0.0", port:5005)
    let (data,_,_) = server.recv(1024)
    DispatchQueue.main.async {
       ...
    }
}
Run Code Online (Sandbox Code Playgroud)

这非常有效,并启动了一个等待我的数据进来的过程。如果我们从未收到回复,让我夜不能寐的是会发生什么?server.recv 永远不会返回,所以我看不到这个过程将如何结束?有没有办法给它预定的运行时间?

swift dispatch-queue

6
推荐指数
2
解决办法
7074
查看次数

SwiftUI:窗口关闭时运行代码 macOS

我已经以传统方式打开了窗口,但我想在通过单击关闭框(红色按钮)关闭窗口时运行一些代码。有没有好的方法可以做到这一点?

func openMyWindow()
{
    myWindow = (NSWindow(
    contentRect: NSRect(x: 100, y: 100, width: 100, height: 600),
    styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
        backing: .buffered, defer: false))
    myWindow!.contentView = NSHostingView(rootView: MyWindowView())
        myWindow!.makeKeyAndOrderFront(nil)
}
Run Code Online (Sandbox Code Playgroud)

macos window swiftui

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

SwiftUI:macOS 工具栏最初呈灰色

当我第一次启动我的应用程序时,工具栏图标会显示并且工作正常,但它们最初呈灰色,直到将鼠标悬停在按钮上为止。

首次运行应用程序:

在此输入图像描述

然后将鼠标悬停在:

在此输入图像描述

这是代码:

import SwiftUI

struct ContentView: View
{
    @State var mainList:[String] = ["Alpha", "Bravo", "Charlie", "Delta", "Echo", "Foxtrot", "Golf", "Hotel", "Indigo", "Juliet", "Kilo", "Lima", "Mike", "November", "Oscar", "Papa", "Quebec", "Romeo", "Sierra", "Tango", "Uniform", "Victor", "Whisky", "Xray", "Yankee", "Zulu"]
    @State var selectedItem:String? = "Echo"
    var body: some View
    {
        NavigationView
        {
            List()
            {
                ForEach(mainList, id: \.self)
                {item in
                    NavigationLink(destination: DetailView(item: item), tag: item, selection: $selectedItem, label:
                                    {
                                        Text("\(item)")
                                    })
                    
                }
            }
        }
        .toolbar
        {
            Button(action: {addNewItem()})
            {
                Label("Select", systemImage: …
Run Code Online (Sandbox Code Playgroud)

macos toolbar swiftui

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

SwiftUI:如何从 macOS 上的联系人中拖放联系人

我正在尝试将联系人从联系人拖到我的应用程序中。

这是我更新的代码:

import SwiftUI
import UniformTypeIdentifiers
let uttypes = [UTType.contact, UTType.emailMessage]

struct ContentView: View
{
    let dropDelegate = ContactDropDelegate()

    var body: some View
    {
        VStack
        {
            Text("Drag your contact here!")
            .padding(20)
        }
        .onDrop(of: uttypes, delegate: dropDelegate)
    }
}

struct ContactDropDelegate: DropDelegate
{

    func validateDrop(info: DropInfo) -> Bool
    {
        return true
    }
    
    func dropEntered(info: DropInfo)
    {
        print ("Drop Entered")
    }
    
    func performDrop(info: DropInfo) -> Bool
    {
        print ("performDrop")
        NSSound(named: "Submarine")?.play()
        
        print (info)
        print ("Has UniformTypeIdentifiers:", info.hasItemsConforming(to: uttypes))
        
        let items = info.itemProviders(for: …
Run Code Online (Sandbox Code Playgroud)

macos drag-and-drop contacts swiftui

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

在 Swift 中解码引用的可打印消息

我有一个带引号的可打印字符串,例如“The cost would be =C2=A31,000”。如何将其转换为“成本为 \xc2\xa31,000”。

\n\n

我目前只是手动转换文本,这并不涵盖所有情况。我确信只有一行代码可以帮助解决这个问题。

\n\n

这是我的代码:

\n\n
func decodeUTF8(message: String) -> String\n{\n    var newMessage = message.stringByReplacingOccurrencesOfString("=2E", withString: ".", options: NSStringCompareOptions.LiteralSearch, range: nil)\n    newMessage = newMessage.stringByReplacingOccurrencesOfString("=E2=80=A2", withString: "\xe2\x80\xa2", options: NSStringCompareOptions.LiteralSearch, range: nil)\n    newMessage = newMessage.stringByReplacingOccurrencesOfString("=C2=A3", withString: "\xc2\xa3", options: NSStringCompareOptions.LiteralSearch, range: nil)\n    newMessage = newMessage.stringByReplacingOccurrencesOfString("=A3", withString: "\xc2\xa3", options: NSStringCompareOptions.LiteralSearch, range: nil)\n    newMessage = newMessage.stringByReplacingOccurrencesOfString("=E2=80=9C", withString: "\\"", options: NSStringCompareOptions.LiteralSearch, range: nil)\n    newMessage = newMessage.stringByReplacingOccurrencesOfString("=E2=80=A6", withString: "\xe2\x80\xa6", options: NSStringCompareOptions.LiteralSearch, range: nil)\n    newMessage = newMessage.stringByReplacingOccurrencesOfString("=E2=80=9D", withString: "\\"", options: NSStringCompareOptions.LiteralSearch, range: nil)\n …
Run Code Online (Sandbox Code Playgroud)

macos utf-8 quoted-printable swift

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

突出显示 NSTextField 中的选择

我希望能够突出显示 NSTextField 中的一部分文本,但我无法通过谷歌来做到这一点。

我已经定义了一个 NSRange,但我找不到使用这个范围来突出显示文本的方法。我唯一出现的是 textField.selectText 但这应该突出显示整个字段。

我正在使用 Swift 2。

macos highlight nstextfield

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