2013-12-10 2 views
0

, 나는 Rubymotion 찻잔 변수 범위

class WindowController < TeacupWindowController 
    stylesheet :pref_window 

layout do 

    @loginButton = subview(
    NSButton, :loginButton, 
    state: NSOffState, 
    buttonType: NSSwitchButton, 
    action: 'login', 
    target: self, 
    ) 

    puts @loginButton.class 

end 

puts @loginButton.class 

처음 박았

은 NSButton 클래스를 반환 레이아웃 블록의 외부 변수에 액세스하기 위해 노력하고있어,하지만 두 번째는 무기 호 클래스를 반환합니다.

@loginButton을 프로그래밍 방식으로 변경해야하는 경우 어떻게해야합니까? 예를 들어

:

@loginButton.setState(NSOnState) 

레이아웃 블록 외부에서 작동하지 않습니다.

답변

1

그런 다음 레이아웃 블록에 당신이 self.loginButton를 사용할 수 있으며, WindowController상의 attr_accessor를 사용할 수 있으며이 버튼에 대한 액세스를주는 WindowController에 할당됩니다.

두 번째 puts이 실제로 다른 방법으로 사용되고 있다고 가정합니다.이 코드는 예제 코드입니다.

class WindowController < TeacupWindowController 
    stylesheet :pref_window 
    attr_accessor :loginButton 

    layout do 

    self.loginButton = subview(
     NSButton, :loginButton, 
     state: NSOffState, 
     buttonType: NSSwitchButton, 
     action: 'login', 
     target: self, 
    ) 

    puts self.loginButton.class 

    end 

    puts self.loginButton.class 
end 
+0

힌트를 보내 주셔서 감사합니다. 트윗의 예에서 나는 질문에 링크되어 있지만, 그들은 자기를 사용하지 않는다. – vash

+0

왜냐하면 그들은 변수와 관련된 액션 내에서만 변수를 사용하기 때문입니다. 그래서 나는'def login' 내에서 @loginButton 변수를 사용할 수 있지만 다른 메소드 정의에서는 사용할 수 없습니다. 이게 옳은 거니? – vash

+0

제가 잘못 생각한 것 같습니다. 문제는 레이아웃 블록이 아직 호출되지 않았다는 것입니다. 뷰를로드하고 표시 한 후 실행될 액션이나 다른 액션에서 @loginButton을 사용하는 경우에는 모든 것이 좋을 것입니다. – FluffyJack