拡張性-iOSExtensibility - iOS

要素ごとの表示の変更Changing per element rendering

開発者は、TextBlock などの renderred AdaptiveCards 要素の外観をカスタマイズできます。Developers can customize the look of renderred AdaptiveCards elements such as TextBlock. 次の例では、数値入力の背景色を変更する方法を示します。Following example shows how one can change background color of NumberInput.

ACRRegistration *registration = [ACRRegistration getInstance];
// register custom renderer with registration
// custom renderer must implement ACRIBaseCardElementRenderer protocol
// for more information, please refer to CustomInputNumberRenderer.mm
 [registration setBaseCardElementRenderer:[CustomInputNumberRenderer getInstance] cardElementType:ACRNumberInput];
 ...
/// CustiomInputNumberRenderer.mm
- (UIView *)render:(UIView<ACRIContentHoldingView> *)viewGroup
              rootViewController:(UIViewController *)vc
              inputs:(NSArray *)inputs
     baseCardElement:(ACOBaseCardElement *)acoElem
          hostConfig:(ACOHostConfig *)acoConfig
  {
      ACRInputNumberRenderer *defaultRenderer = [ACRInputNumberRenderer getInstance];
 
      UIView *input = [defaultRenderer render:viewGroup
                           rootViewController:vc
                                       inputs:inputs
                              baseCardElement:acoElem
                                   hostConfig:acoConfig];
      if(input)
      {   
          // customize background color of input
          [input setBackgroundColor: [UIColor colorWithRed:1.0
                                                     green:59.0/255.0
                                                      blue:48.0/255.0
                                                     alpha:1.0]];
      }
      return input;
  }

追加のプロパティAdditional Property

開発者は、json ペイロードの一部として追加のプロパティを送信することもできます。Developers can also send in additional properties as part of json payload. たとえば、BaseCardElement の json ペイロードの "スペーシング" と "id" に加え、TextBlock の角の半径を json ペイロードに追加することができます。For example, in addition to "spacing" and "id" of json payload for BaseCardElement, one can add radius for corners of TextBlock to its json payload.

"type":"TextBlock",
...
"radius":20,
...
        NSData *additionalProperty = [acoElem additionalProperty];
         if(additionalProperty) {
             NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:additionalProperty options:NSJSONReadingMutableLeaves error:nil];
             radiusForMyTextBlock = dictionary[@"radius"];
         ...

カスタム解析Custom Parsing

開発者は、カスタム解析を使用したり、進行状況バーなどの adpative card に新しい UI 要素を追加したりすることもできます。Developers can also have custom parsing and have new UI element added to adpative card such as progress bar. 詳細については、CustomProgressBarRenderer.mm を確認してください。Please check CustomProgressBarRenderer.mm for detail. カスタムパーサーは ACOIBaseCardElementParser プロトコルを実装する必要があります。Custom parser must implement ACOIBaseCardElementParser protocol. deserializeToCustomElement メソッドは、NSData として指定された json ペイロードを解析し、AdaptiveCard に表示されたオブジェクトに追加される UIView オブジェクトへのポインターを返す必要があります。deserializeToCustomElement method should parses given json payload given as NSData and return a pointer to UIView object that will be added to AdaptiveCard rendered object.

      CustomProgressBarRenderer *progressBarRenderer = [[CustomProgressBarRenderer alloc] init];
      [registration setCustomElementParser:progressBarRenderer];
```objective-c