NSTableCellView中如果是NSTextField, 在編輯狀態下如何獲取到NSTextField新輸入的值

主要爲NSTextField的delegate設置和實現, 

1. 在storyboard中要設置好NSTextField的delegate

 

2. 實現delegate方法

此處view controller是否繼承實現NSTextFieldDelegate都無關緊要, 這是因爲在NSControll中

將以下幾個方法用類目的方式,  添加到了NSObject內

@interface NSObject(NSControlSubclassNotifications)
- (void)controlTextDidBeginEditing:(NSNotification *)obj;
- (void)controlTextDidEndEditing:(NSNotification *)obj ;
- (void)controlTextDidChange:(NSNotification *)obj;
@end

所以, 只要設置了delegate連接, 實現這幾個方法即可

3. 這幾個方法獲取NSTextField最新輸入的內容:

NSTextField *tf = obj.object;
NSLog(@"text field:%@",tf.stringValue);

4. 如果在NSTableCellView中使用的NSTextField,  可通過tf來獲取到其NSTableRowView以及所在的column

NSTableCellView *cellView = (NSTableCellView *)[tf superview];
NSTableRowView *rowView = (NSTableRowView *)[cellView superview];
NSInteger row = [self.tableView rowForView: rowView];
// 檢查rowView在table view的第幾行, 從0開始
NSInteger col = [rowView.subviews indexOfObject: cellView]-1;
// 檢查當前的textField在第幾列
NSLog(@"obj:%lu = %lu = %@",row,col,tf.stringValue);

通過此方式, 可獲取到對text field的輸入/輸出內容動態監控

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章