我已经设置了一个带有嵌入式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) 我是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) 我试图在我的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.
我已经跟踪了代码,它确实进入了窗口打开代码,但它没有做任何事情.
顺便说一句,我确实有一个默认的故事板入口点设置,默认窗口打开确定但我需要打开第二个窗口,这是不起作用的.
我正试图让结构工作,但互联网或印刷书籍上没有任何记录的例子.
网站上的这个例子(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,结构尚未定义或结构正在定义它的相同上下文中访问.
我有一个 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 永远不会返回,所以我看不到这个过程将如何结束?有没有办法给它预定的运行时间?
我已经以传统方式打开了窗口,但我想在通过单击关闭框(红色按钮)关闭窗口时运行一些代码。有没有好的方法可以做到这一点?
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) 当我第一次启动我的应用程序时,工具栏图标会显示并且工作正常,但它们最初呈灰色,直到将鼠标悬停在按钮上为止。
首次运行应用程序:
然后将鼠标悬停在:
这是代码:
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) 我正在尝试将联系人从联系人拖到我的应用程序中。
这是我更新的代码:
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) 我有一个带引号的可打印字符串,例如“The cost would be =C2=A31,000”。如何将其转换为“成本为 \xc2\xa31,000”。
\n\n我目前只是手动转换文本,这并不涵盖所有情况。我确信只有一行代码可以帮助解决这个问题。
\n\n这是我的代码:
\n\nfunc 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) 我希望能够突出显示 NSTextField 中的一部分文本,但我无法通过谷歌来做到这一点。
我已经定义了一个 NSRange,但我找不到使用这个范围来突出显示文本的方法。我唯一出现的是 textField.selectText 但这应该突出显示整个字段。
我正在使用 Swift 2。