Swift编程iOS DeveloperiOS Development

iOS Today Extension开发(Widget)

2016-10-25  本文已影响629人  退役程序猿

前言:

先来张效果图:

Untitled.gif 1.png 2.png 3.png

纯代码需要配置info.plist的俩项参数:

移除NSExtensionMainStoryboard 键,并添加NSExtensionPrincipalClass 键,使用view controller的名字作为值。

4.png

第二步:开发这个玩意

如果你看一下官方对于今日插件的UI指南,有两点值得注意:
1、尽量不要使用背景,默认的毛玻璃效果很好,也比较统一;
2、尽量保持默认的缩进,即左边会空几个像素。

-(UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:        (UIEdgeInsets)defaultMarginInsets{
    return UIEdgeInsetsZero;
}

与宿主App进行交互-扩展App跳转主App

TodayViewController.m类实现代码
//点击按钮跳转页面
-(void)BUttonClick:(UIButton *)Bt{
UIButton* button = (UIButton*)Bt;
  if (button.tag == 0) {
    [self.extensionContext openURL:[NSURL URLWithString:@"跳转链接"] completionHandler:^(BOOL success) {
         NSLog(@"open url result:%d",success);
    }];
}
else if(button.tag == 1) {
    [self.extensionContext openURL:[NSURL URLWithString:@"跳转链接"] completionHandler:^(BOOL success) {
        NSLog(@"open url result:%d",success);
    }];
}
else if(button.tag == 2) {
    [self.extensionContext openURL:[NSURL URLWithString:@"跳转链接"] completionHandler:^(BOOL success) {
        NSLog(@"open url result:%d",success);
    }];
}
}

配置跳转链接协议

16632-8df6a709f3a34305.png

AppDelegate.m类实现代码

跳转链接与TodayViewController.m类跳转链接相对应
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
UINavigationController * nav = (UINavigationController*)[customTabBarController.viewControllers objectAtIndex:0];
  if ([ctrlString isEqual:@"跳转链接"]) {
      跳转操作
  }if ([ctrlString isEqual:@"跳转链接"]) {
      跳转操作
  }if ([ctrlString isEqual:@"跳转链接"]) {
      跳转操作
  }
  return NO;
 }

数据共享(主App和扩展App)

数据共享的方式有很多种方法我来介绍俩种具体你们在研究
第一种:利用Group
C8BAEAB5-6872-4A91-99FF-D806E4D4F882.png

主App存扩展App所需要数据

NSUserDefaults* userDefault = [[NSUserDefaults alloc] initWithSuiteName:@"group.cn.10086.shandongmcc"];
[userDefault setBool:YES forKey:@"islogin"];

扩展App取所需要数据

NSUserDefaults *myDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.cn.10086.shandongmcc"];
BOOL isLogin = [myDefaults objectForKey:@"slogan"];
第二种:利用接口

总结:

补充:

上一篇 下一篇

猜你喜欢

热点阅读