Apple Watch WatchKit App -> 親アプリ 返信メッセージ Objective-C

返信ボタンを押した状態

 

Main.storyboardでUIを作成します。
Labelを1個使用します。

 

Interface.storyboardでUIを作成します。
いつものiOS開発と同じです。Label2つとButtonを1つ貼り付けます。

AppDelegate.m

#import "AppDelegate.h"

#import "ViewController.h"

@interface AppDelegate ()


@end


@implementation AppDelegate


- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply{

    

    NSDictionary *info;

    

    // 空白ではなかったら

    if (userInfo != nil)

    {

        [[NSNotificationCenter defaultCenter]

              postNotificationName:@"changeText" object:self userInfo:userInfo];

        [info setValue:@"seccess" forKey:@"type"];

        

        // reply:返信

        reply([NSDictionary dictionaryWithObject:@"success" forKey:@"response"]);

    }else{

        

        [info setValue:@"wrong" forKey:@"type"];

        // reply:返信

        reply(info);

    }

}


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    

    return YES;

}


- (void)applicationWillResignActive:(UIApplication *)application {

    

}


- (void)applicationDidEnterBackground:(UIApplication *)application {

    

}


- (void)applicationWillEnterForeground:(UIApplication *)application {

    

}


- (void)applicationDidBecomeActive:(UIApplication *)application {

    

}


- (void)applicationWillTerminate:(UIApplication *)application {

    

}


@end


ViewController.m

#import "ViewController.h"


@interface ViewController ()

@property (weak, nonatomic) IBOutlet UILabel *showLable;

@property (nonatomic,retain) UILabel *myLabel;

@end


@implementation ViewController


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

- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    self.view.backgroundColor = [UIColor whiteColor];

    

    //【通知の受取側 - 受取の登録】

    // 通知 デフォルトの通知センターを取得する

    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];

    

    // 通知センターに通知要求を登録する

    // この例だと、通知センターに"setchangeText"という名前の通知がされた時に、

    // setMyLabelText:メソッドを呼び出すという通知要求の登録を行っている。

    [nc addObserver:self selector:@selector(setMyLabelText:) name:@"changeText" object:nil];

}


// showLable.textに表示

- (void)setMyLabelText:(NSNotification *)labelStr{

    

    NSDictionary *dic = [labelStr userInfo];

    self.showLable.text = [dic objectForKey:@"content" ];

    

}


- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


@end


InterfaceController.m

#import "InterfaceController.h"



@interface InterfaceController()

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


@end



@implementation InterfaceController


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

- (void)awakeWithContext:(id)context {

    [super awakeWithContext:context];


        [self.replayLabel setHidden:YES];

    // Configure interface objects here.

}


// ユーザーに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];

}


// 返信ボタンアクション

- (IBAction)replay

{

    NSMutableDictionary *infoDic = [[NSMutableDictionary alloc] init];

    [infoDic setValue:@"おかけさまで元気です!" forKey:@"content"];

    [WKInterfaceController openParentApplication:infoDic reply:^(NSDictionary *replyInfo, NSError *error) {

        NSLog(@"----->%@",replyInfo);

        if ([[replyInfo objectForKey:@"response"] isEqualToString:@"success"])

        {

            [self.replayLabel setHidden:NO];

            [self.replayLabel setText:[infoDic objectForKey:@"content"]];

        }

    }];

    

}


@end

 

GitHub WatchKitReplyObj

 

▫️参考にしたページ


  

目 次