NSTableView (View Based)의 초보적 구현

개요


  • NSTableView에는 Cell Base와 View Base의 2 종류가 있어, 이번은 후자의 구현.
  • 아래와 같이 2열의 심플한 구현을 실시한다.
  • 간단한 구현 예를 찾을 수 없어 상당히 고생했다. NSArrayController를 사용하고 있는 것은 있는데. 힐레가스 책은 Entity라든지 사용하고 있고.
  • UITableView나 cellBase 쪽이 아직 알기 쉽다는 인상



  • GitHub



  • htps : // 기주 b. 코 m / 뽀 m dau / 타 b ゔ ぃ 에 w_
  • 8d8e64516514f5cec6d17903fd05efa1642bcfcd


  • 구현 절차


  • 이번은 스토리 보드 미사용.
  • TableView의 처리는 후술하는 NSObjectController의 클래스에서 행한다.


  • NSObjectController 클래스의 「TableController」의 작성.


  • Object를 추가해, 클래스에 TableController를 설정


  • TableView 추가 및 바인딩


  • identifier 설정


  • 이번 TableView에 표시하는 데이터는 AppDelegate.h/m가 소유한다.
  • AppDelegate.h 에서 변수 선언.
  • //  AppDelegate.h
    //  TableView_ViewBased
    
    #import <Cocoa/Cocoa.h>
    
    @interface AppDelegate : NSObject <NSApplicationDelegate>
    @property (readwrite,nonatomic) NSMutableArray* tableData;
    @end
    
  • AppDelegate.m에 init을 추가하고 테이블에 표시 할 데이터를 초기화합니다.
    - (id)init{
        self = [super init];
        if (self) {
            //テーブル表示データを初期化
            _tableData = [NSMutableArray array];
            [_tableData addObject: @{
                                     @"name" : @"ピカチュウ",
                                     @"type" : @"でんき"
                                     }];
            [_tableData addObject: @{
                                     @"name" : @"ゼニガメ",
                                     @"type" : @"みず"
                                     }];
            [_tableData addObject: @{
                                     @"name" : @"ヒトカゲ",
                                     @"type" : @"みず"
                                     }];
            [_tableData addObject: @{
                                     @"name" : @"フシギダネ",
                                     @"type" : @"くさ"
                                     }];
        }
        return self;
    }
    
  • tableController.h에 tableView를 바인딩.


  • TableController.m 에 TableView 표시에 필요한 함수를 작성한다.
  • AppDelegate 에서 데이터를 당기기 때문에 import를 잊지 마세요.
  • #import "TableController.h"
    #import "AppDelegate.h"
    
    @implementation TableController
    
    #pragma mark - NSTableView data source
    
    - (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView{
        AppDelegate *appD = (AppDelegate*)[[NSApplication sharedApplication]delegate];
        return appD.tableData.count;
    }
    
    // 使い方はセル・ベースのtableView:objectValueForTableColumn:row:とほとんど同じ。
    // コラムをidentifierで特定してデータ・ソース配列の中のrowインデクスと同じインデクスの値を返してやる。
    // ビュー・ベースの場合はその値を当てがったセル・ビューを返すというだけだ。
    
    - (NSView *)tableView:(NSTableView *)tableView
       viewForTableColumn:(NSTableColumn *)tableColumn
                      row:(NSInteger)row{
        AppDelegate     *appD           = (AppDelegate*)[[NSApplication sharedApplication]delegate];
        NSString        *identifier     = tableColumn.identifier;
        NSDictionary    *data           = [appD.tableData objectAtIndex:row];
        NSTableCellView *cellView       = [tableView makeViewWithIdentifier:identifier owner:self];
        cellView.textField.stringValue  = [data objectForKey:identifier];
        return cellView;
    }
    @end
    

    참고 사이트


  • 뷰 기반 테이블 뷰 기본 버섯 (1)
  • 뷰 기반 테이블 뷰 기본 버섯 (2)
  • AppDelegate 얻기

  • 이제 모든 클래스에서 볼 수 있습니다. 쉽습니다. 또한 앱이 실행되는 동안 AppDelegate 인스턴스는 언제든지 해제되지 않고 유지된다는 보장이 있다는 점도 있습니다.

    좋은 웹페이지 즐겨찾기