2013-12-10 2 views
0

После Tweets example в стакане воды, я пытаюсь получить доступ к переменной вне блока макета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, но второй один класс возвращает Nil.

Как я могу получить доступ к @loginButton, если мне нужно программно внести в него изменения?

Например:

@loginButton.setState(NSOnState) 

не работает вне блока макета.

ответ

1

Вы можете использовать attr_accessor на WindowController, то в блоке компоновки вы можете использовать self.loginButton и он будет назначен на 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

Это потому, что они используют переменную только внутри действия: связанные с переменной. Поэтому я могу использовать переменную @loginButton внутри моего 'def login', но не в определении других методов. Это правильно? – vash

+0

Я думаю, что я, возможно, ошибся ... что может быть вашей проблемой, так это просто, что блок макета еще не был вызван. Все должно быть хорошо, если вы используете @loginButton в действии или что-то еще, которое будет запущено после того, как представление будет загружено и отображено. – FluffyJack