2015-09-13 4 views
0

У меня возникла проблема, когда мне нужно установить связь между классом, который является подклассом nstextfield, и контроллером представления, который я использую в проекте быстрого какао.Взаимодействие между подклассом nstextfield и контроллером представления в swift

Подкласс nstextfield изменяет размер его кадра. Само поле находится внутри таблицы в контроллере представления. По сути, когда nstextfield изменяет размер своего фрейма, я хочу, чтобы диспетчер представлений узнал об этом. Я могу сигнализировать контроллеру представления о том, что кадр изменился с помощью Центра Nsnotification, где наблюдатель в контроллере представления прослушивает уведомление, который работает нормально. Но теперь, когда это уведомление вызвано, мне нужно просмотреть контроллер, чтобы вернуться в подклассовое поле nstext, чтобы получить размер кадра. Я не верю, что могу передать, например, размер кадра с уведомлением.

Может ли кто-нибудь дать мне представление о том, как я получаю размер фрейма nstextfield из контроллера вида?

Благодарим за помощь.

+0

Вы отправляете свое собственное уведомление или используете NSViewFrameDidChangeNotification? – Willeke

+0

Привет, Вилле, я отправляю свое собственное уведомление следующим образом: NSNotificationCenter.defaultCenter(). PostNotificationName ("adviseViewControllerTextboxChanged", object: nil) ', который по существу запускает функцию для обработки повторной сортировки этой конкретной строки в таблице. Моя проблема тогда становится той, что мне нужно знать внутри этой функции размер фрейма на nstextfield в этой конкретной строке. – user3932488

ответ

0

Когда вы публикуете свое уведомление, вы можете указать объект, в данном случае текстовое поле. Контроллер просмотра может извлекать текстовое поле из объекта notification.object и запрашивать его фрейм.

Если диспетчеру просмотра требуется дополнительная информация, вы можете использовать -postNotificationName: object: userInfo :, userinfo - словарь, в котором вы можете хранить все, что захотите.

+0

Это решает мою проблему. Именно то, что я пытался разобраться. Спасибо, Виллеке! – user3932488

0

Вы должны использовать расширение NSTextFieldDelegate - protocol выше вашего подклассы класса текстового поля с пользовательским методом, как

protocol MyCustomTextFieldDelegate: NSTextFieldDelegate 
{ 
    func OnTextFieldSizeDidChange(sender:MyCustomTextField, newFrame:CGFrame) 
} 

class MyCustomTextField : NSTextField 
{ 
//... 
weak var customDelegate: MyCustomTextFieldDelegate? 
} 

Тогда просто реализовать этот протокол контроллер представления и установите customDelegate -свойство на текстовом поле инициализации.

Когда ваше текстовое поле изменило рамку, следует вызвать метод выше.

Смежные вопросы