我想在一个ViewController上有多个NSTableViews.我用以下代码实现了第一个TableView:
class MainViewController: NSViewController
{
@IBOutlet weak var tableView: NSTableView!
override func viewDidLoad()
{
super.viewDidLoad()
let nib = NSNib(nibNamed: "MyCellView", bundle: NSBundle.mainBundle())
tableView.registerNib(nib!, forIdentifier: "MyCellView")
let appDelegate = NSApplication.sharedApplication().delegate as! AppDelegate
appDelegate.view = self
}
}
extension MainViewController: NSTableViewDataSource, NSTableViewDelegate
{
func numberOfRowsInTableView(tableView: NSTableView) -> Int
{
return 5
}
func tableView(tableView: NSTableView, heightOfRow row: Int) -> CGFloat
{
return 25
}
func tableView(tableView: NSTableView, viewForTableColumn tableColumn: NSTableColumn?, row: Int) -> NSView?
{
let cell = tableView.makeViewWithIdentifier("MyCellView", owner: self) as! …Run Code Online (Sandbox Code Playgroud) 我有一个简单的登录对话框,要求输入密码。在模态上是一个 NSSecureTextField。我希望这是第一响应者,但我一直无法找到如何做到这一点?
func loginDialog(question: String) -> String
{
let alert = NSAlert()
alert.messageText = question
alert.alertStyle = .warning
alert.addButton(withTitle: "Login")
alert.addButton(withTitle: "Cancel")
let passField = NSSecureTextField(frame: NSRect(x: 0, y: 24, width: 250, height: 24))
let stackViewer = NSStackView(frame: NSRect(x: 0, y: 0, width: 250, height: 50))
stackViewer.addSubview(passField)
alert.accessoryView = stackViewer
//this doesn't do anything :-(
alert.window.makeFirstResponder(passField)
let x = alert.runModal()
if (x == NSApplication.ModalResponse.alertFirstButtonReturn)
{
return (passField.stringValue)
}
else
{
return ("")
}
}
Run Code Online (Sandbox Code Playgroud)
我也无法让 becomeFirstResponder 工作。
更新:我收到错误:错误:设置为窗口的第一响应者,但它在不同的窗口中((空))!当视图被释放时,这最终会崩溃。第一响应者将被设置为 nil。
所以我明白为什么,但只是不知道如何解决。
我要求Elixir中的for循环返回一个计算值.
这是我的简单示例:
a = 0
for i <- 1..10
do
a = a + 1
IO.inspect a
end
IO.inspect a
Run Code Online (Sandbox Code Playgroud)
这是输出:
warning: variable i is unused
Untitled 15:2
2
2
2
2
2
2
2
2
2
2
1
Run Code Online (Sandbox Code Playgroud)
我知道我没有使用过,可以用来代替本例中的a,但这不是问题.问题是如何让for循环返回变量a = 10?
我有一个 UITableView 有几个标题,但字体大小比我想要的大得多:
我在系统首选项中看到 Apple 使用大写的部分标题使用较小的字体大小,底部对齐如下:
我知道我可以使用 viewForHeaderInSection 创建我自己的布局,但我的问题是有一个简单的选项可以调用这个标准的操作系统样式,而无需重新发明轮子?
我试图立即显示两个不同的警报。第一个是加载指示器。第二个是警报,告诉用户他们正在执行的操作是否成功,或者是否遵循UDP消息。我已出于演示目的简化了代码。
我的问题是,尽管我在调用第二个警报之前就关闭了loadingAlert,但仍然收到错误消息:
警告:在进行演示时,尝试在ViewController上呈现UIAlertController!
我的第二次警报从未显示。
这是我的Swift 4代码:
func getUpdate()
{
let loading = alert(title: "Performing Task...")
DispatchQueue.global(qos: .userInitiated).async {
let server:UDPServer=UDPServer(address:"0.0.0.0", port:5006)
let (data,_,_) = server.recv(1024)
DispatchQueue.main.async
{
loading.dismiss(animated: false, completion: nil)
OperationQueue.main.addOperation
{
alert(title: "How can I show this alert?")
}
}
}
}
func alert(title:String) -> UIAlertController
{
let alertController = UIAlertController(title: title, message: "", preferredStyle: UIAlertControllerStyle.alert)
...
rootViewController?.present(alertController, animated: true, completion: nil)
return alertController
}
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?
我有一段简单的代码,在大多数语言中都非常简单。我真的很想知道如何做到这一点。我如何将其转换为Elixir,而不会收到可怕的变量不安全警告?
dc = 1
sd = 5
sdi = 6
calc = 1
bc = 1
dd = 10
if (dc == 1)
csd = sd
bd = sd
p = sdi
if (calc == 1 && bc != 1) do
count = 1
else
count = 20
end
else
csd = dd
bd = dd
p = dd
count = 1
end
Run Code Online (Sandbox Code Playgroud) swift ×4
elixir ×2
for-loop ×1
macos ×1
nested-if ×1
nsalert ×1
nstableview ×1
nstextfield ×1
uitableview ×1