Extensibilité-iOSExtensibility - iOS

Modification par élément renduChanging per element rendering

Les développeurs peuvent personnaliser l’apparence des éléments renderred AdaptiveCards tels que TextBlock.Developers can customize the look of renderred AdaptiveCards elements such as TextBlock. L’exemple suivant montre comment modifier la couleur d’arrière-plan de NumberInput.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;
  }

Propriété supplémentaireAdditional Property

Les développeurs peuvent également envoyer des propriétés supplémentaires dans le cadre de la charge utile JSON.Developers can also send in additional properties as part of json payload. Par exemple, en plus de « l’espacement » et de l’ID de charge utile JSON pour BaseCardElement, vous pouvez ajouter RADIUS pour les angles de TextBlock à sa charge utile 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"];
         ...

Analyse personnaliséeCustom Parsing

Les développeurs peuvent également avoir une analyse personnalisée et ajouter un nouvel élément d’interface utilisateur à la carte Adpative, comme la barre de progression.Developers can also have custom parsing and have new UI element added to adpative card such as progress bar. Pour plus d’informations, consultez CustomProgressBarRenderer.mm.Please check CustomProgressBarRenderer.mm for detail. L’analyseur personnalisé doit implémenter le protocole ACOIBaseCardElementParser.Custom parser must implement ACOIBaseCardElementParser protocol. la méthode deserializeToCustomElement doit analyser la charge utile JSON donnée en tant que NSData et retourner un pointeur vers l’objet UIView qui sera ajouté à AdaptiveCard objet rendu.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