2015年

4月

19日

Apple Watch Table View データ読み込みPlistの作成

Xcode 6.2 以上
https://developer.apple.com/xcode/downloads/
6.2からAppleWatch開発環境(watchkit)が入っています。

iOS8.2以上 (iPhone)
8.2にバージョンアップするとアプリ「Apple Watch」が追加されるのですぐわかります。

 

iPhoneアプリケーション プロジェクトを生成
xcode起動後、「Create a new Xcode project」を選択します。
次にiOS -> Application -> Single View Applicationを選択します。


WatchKit App側のInterface.storyboard


Characters.plist内容
name:名前
title:タイトル
bio:内容
image:画像名



テーブル表示のソースコード

InterfaseController.mに記述します。

プロパティリストのデータを読み出す方法はソースを参照。

//

//  InterfaceController.m

//  StarWarsWatchKit WatchKit Extension

//

//  Created by MAEDAHAJIME on 2015/04/19.

//  Copyright (c) 2015 MAEDAHAJIME. All rights reserved.

//


#import "InterfaceController.h"

// テーブル行

#import "CharacterTableRow.h"


@interface InterfaceController()


// テーブル

@property (weak, nonatomic) IBOutlet WKInterfaceTable *characterTable;


// Plist配列

@property (strong, nonatomic) NSArray *characterData;


@end



@implementation InterfaceController


- (void)awakeWithContext:(id)context {

    [super awakeWithContext:context];

    

    // Plistの読み込み設定

    self.characterData = [NSArray arrayWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"Characters" withExtension:@"plist"]];

}


// ユーザーにUIが表示されたタイミングで呼び出されるメソッド

- (void)willActivate {

    

    [super willActivate];

    

    [self.characterTable setNumberOfRows:self.characterData.count withRowType:@"CharacterRow"];

    for (NSInteger i = 0; i < self.characterTable.numberOfRows; i++)

    {

        // irowテーブル行番号生成

        CharacterTableRow* row = [self.characterTable rowControllerAtIndex:i];

        

        // iPlist行生成

        NSDictionary *character = [self.characterData objectAtIndex:i];

        

        // 名前セット

        [row.name setText:character[@"name"]];

        // タイトルセット

        [row.role setText:character[@"title"]];

        // 画像セット

        [row.image setImageNamed:character[@"image"]];

    }

}


// UIが非表示になったタイミングで呼び出されるメソッド

- (void)didDeactivate {

    

    [super didDeactivate];

}


// Tableをタップした時の画面遷移処理

- (id)contextForSegueWithIdentifier:(NSString *)segueIdentifier inTable:(WKInterfaceTable *)table rowIndex:(NSInteger)rowIndex

{

    if ([segueIdentifier isEqualToString:@"characterDetailSegue"])

    {

        // Plist行データの受け渡し

        NSDictionary *character = [self.characterData objectAtIndex:rowIndex];

        return character;

    }

    else

        return nil;

}


@end

#import <Foundation/Foundation.h>

#import <WatchKit/WatchKit.h>


//接続

@interface CharacterTableRow : NSObject


// 名前

@property (weak, nonatomic) IBOutlet WKInterfaceLabel *name;

// タイトル

@property (weak, nonatomic) IBOutlet WKInterfaceLabel *role;

// 画像

@property (weak, nonatomic) IBOutlet WKInterfaceImage *image;


@end


 

詳細表示のソースコード

DetailInterfaceController.mに記述します。

#import "DetailInterfaceController.h"


// 接続

@interface DetailInterfaceController()


// 画像

@property (weak, nonatomic) IBOutlet WKInterfaceImage *image;

// 名前

@property (weak, nonatomic) IBOutlet WKInterfaceLabel *name;

// タイトル

@property (weak, nonatomic) IBOutlet WKInterfaceLabel *role;

// 内容

@property (weak, nonatomic) IBOutlet WKInterfaceLabel *bio;


@end



@implementation DetailInterfaceController


// 最初に呼び出されるメソッド

- (void)awakeWithContext:(id)context {

    [super awakeWithContext:context];

    

    // contextPlist行データ

    NSDictionary *character = (NSDictionary*)context;

    // 画像セット

    [self.image setImageNamed:character[@"image"]];

    // 名前セット

    [self.name setText:character[@"name"]];

    // タイトルセット

    [self.role setText:character[@"title"]];

    // 内容セット

    [self.bio setText:character[@"bio"]];


}


// ユーザーにUIが表示されたタイミングで呼び出されるメソッド

- (void)willActivate {

    // This method is called when watch view controller is about to be visible to user

    [super willActivate];

}


// UIが非表示になったタイミングで呼び出されるメソッド

- (void)didDeactivate {

    // This method is called when watch view controller is no longer visible

    [super didDeactivate];

}


@end

 

GitHub StarWarsWatchKit

  

目 次