2017-12-20 2 views

답변

2

당신은 scrollWheel(with event: NSEvent) 방법을 무시하고 event.deltaY이 양 또는 음인지 확인하고 텍스트 필드의 값을 증가 또는 감소시킬 수있다 : 당신은 당신이 사용할 수 포커스가있는 필드를 변경하려는 경우

import Cocoa 
class ViewController: NSViewController { 
    @IBOutlet weak var textField: NSTextField! 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     textField.stringValue = "0" 
    } 
    override func scrollWheel(with event: NSEvent) { 
     super.scrollWheel(with: event) 
     if var value = Int(textField.stringValue) { 
      if event.deltaY > 0 { 
       value += 1 
      } 
      if event.deltaY < 0 { 
       value -= 1 
      } 
      textField.stringValue = String(value) 
      print(value) 
     } 
    } 
} 

을 보기 창 fieldEditor :

if let text = view.window?.fieldEditor(false, for: nil) { 
    if var value = Int(text.string) { 
     if event.deltaY > 0 { 
      value += 1 
     } 
     if event.deltaY < 0 { 
      value -= 1 
     } 
     text.string = String(value) 
     print(value) 
    } 
} 

당신은 당신이 그것의 대리인으로보기 컨트롤러를 설정하고 textf에 대해 그 대리자를 비교해야하는 것과 특정 필드에 스크롤을 제한하려면 ield 개체 :

import Cocoa 
class ViewController: NSViewController, NSTextFieldDelegate { 
    @IBOutlet weak var textField1: NSTextField! 
    @IBOutlet weak var textField2: NSTextField! 
    override func viewDidAppear() { 
     super.viewDidAppear() 
     textField1.delegate = self 
    } 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     textField1.stringValue = "0" 
     textField2.stringValue = "0" 
    } 
    override func scrollWheel(with event: NSEvent) { 
     super.scrollWheel(with: event) 
     if let textField = (view.window?.firstResponder as? NSTextView)?.delegate, textField === textField1 { 
      if let text = view.window?.fieldEditor(false, for: nil) { 
       if var value = Int(text.string) { 
        if event.deltaY > 0 { 
         value += 1 
        } 
        if event.deltaY < 0 { 
         value -= 1 
        } 
        text.string = String(value) 
        print(value) 
       } 
      } 
     } 
    } 
} 
+0

놀라운 빠르고 유용합니다. 많은 존경! 나는 그것을 시도하고 작동합니다. 문제는 텍스트 필드에 포커스가 있는지 여부에 관계없이 값을 변경한다는 것입니다. 텍스트 필드에 포커스가있을 때만이 효과를 제한 할 수있는 방법이 있습니까? –

+1

위임자를 확인할 수 있습니다. 그것은 까다로울 뿐이지 만 보여 드릴 수 있습니다. –

+0

답변을 둘러 보았습니다.하지만 대부분은 ObjC에 있으며 서브 클래 싱과 관련된 것들에 대해서 이야기합니다. C 세계에는 hasFocus와 iOS와 같은 bool 속성과 같은 것이 있습니다. isFirstResponder 또는 이와 비슷한 것이 있습니다. 그러나 여기서는 꽤 복잡한 것처럼 보입니다. 어떤 도움이라도 최고로 감사 할 것입니다. –

관련 문제