2010-07-16 60 views
1

我有一個工具欄項目包含一個視圖(NSButton)和視圖的目標設置爲nil,所以它會在觸發動作時查找響應者鏈。不過,我在嘗試如何驗證第一響應者時遇到了問題。驗證NSToolbarItem與查看FirstResponder

我已經子類NSToolbarItem和實施-(void)validate。我發現的參考文獻指出,您應該能夠通過調用[[[self view] window] firstResponder]獲得第一響應者,然後查看響應者鏈是否執行NSToolbarItemValidationNSUserInterfaceValidations並調用適當的驗證方法。

但是,當我撥打[[self view] window]時,我回到nil作爲窗口,所以我無法檢索到第一個響應者。

我不確定它是否有所作爲,但我在XIB中創建工具欄而不是將其寫入代碼中。

在NSToolbar.h中,有一個引用了包含窗口的ivar,所以我可以通過調用[[[self toolbar] valueForKey:@"window"] firstResponder]找到第一個響應者,但這有點破解,我寧願使用記錄/穩定的東西。

回答

0

您不需要手動驗證。應用程序爲每個需要驗證的菜單項或工具欄項調用響應程序鏈中每個對象的驗證(或其適當的變體),直到它找到返回YES的項(或者說它支持每個菜單或工具欄項的動作),或者找不到一個。如果找到一個,您的工具欄項目或菜單項已啓用。否則,它被禁用。至少,這是一般理論。

+0

對於包含視圖的NSToolbarItem實例,您需要繼承並提供-validate的實現。我試圖找出當目標是第一響應者時(如'nil')如何編寫該方法。 http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/Toolbars/Tasks/ValidatingTBItems.html#//apple_ref/doc/uid/20000753-BAJGFHDD – Jablair 2010-07-22 16:24:12