Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berikut cara merender kartu menggunakan iOS SDK.
Membuat kartu dari string JSON
AdaptiveCard dihasilkan dari string JSON
NSString *jsonStr = @"{ \"type\": \"AdaptiveCard\", \"version\": \"1.0\", \"body\": [ { \"type\": \"Image\", \"url\": \"http://adaptivecards.io/content/adaptive-card-50.png\", \"horizontalAlignment\":\"center\" }, { \"type\": \"TextBlock\", \"horizontalAlignment\":\"center\", \"text\": \"Hello **Adaptive Cards!**\" } ], \"actions\": [ { \"type\": \"Action.OpenUrl\", \"title\": \"Learn more\", \"url\": \"http://adaptivecards.io\" }, { \"type\": \"Action.OpenUrl\", \"title\": \"GitHub\", \"url\": \"http://github.com/Microsoft/AdaptiveCards\" } ] }";
ACOAdaptiveCardParseResult *cardParseResult = [ACOAdaptiveCard fromJson:jsonStr];
/// access for parse warnings and errors
NSArray<NSError *> *errors = cardParseResult.parseErrors;
NSArray<ACRParseWarning *> *warnings = cardParseResult.parseWarnings;
Menampilkan Kartu
Renderer menerima kartu adaptif dan konfigurasi host. HostConfig dapat kosong, dan jika kosong, nilai default akan digunakan. UIView yang dikembalikan menggunakan autolayout. Lebar akan dibatasi sesuai dengan nilai yang diatur oleh widthConstraint. Jika nilai 0 digunakan, nilai tersebut tidak akan terikat. Tinggi tidak dibatasi, dan ketika dikembalikan ke semula akan memiliki tinggi yang merupakan jumlah semua konten yang dirender. Untuk mengikat dimensi tampilan, gunakan NSLayoutConstraint. Dimensi yang tepat dapat diakses dari konteks viewDidLayoutSubview dari ViewController superview-nya atau metodenya dengan nama yang sama jika ACRViewController digunakan.
ACRRenderResult *renderResult = nil;
if(cardParseResult.isValid){
renderResult = [ACRRenderer render:cardParseResult.card config:nil widthConstraint:335];
}
Contoh
--------------------------------------------------------------------------------
ViewController.m
--------------------------------------------------------------------------------
#import "ViewController.h"
#import <SafariServices/SafariServices.h>
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSString *jsonStr = @"{ \"type\": \"AdaptiveCard\", \"version\": \"1.0\", \"body\": [ { \"type\": \"Image\", \"url\": \"http://adaptivecards.io/content/adaptive-card-50.png\", \"horizontalAlignment\":\"center\" }, { \"type\": \"TextBlock\", \"horizontalAlignment\":\"center\", \"text\": \"Hello **Adaptive Cards!**\" } ], \"actions\": [ { \"type\": \"Action.OpenUrl\", \"title\": \"Learn more\", \"url\": \"http://adaptivecards.io\" }, { \"type\": \"Action.OpenUrl\", \"title\": \"GitHub\", \"url\": \"http://github.com/Microsoft/AdaptiveCards\" } ] }";
ACRRenderResult *renderResult = nil;
ACOAdaptiveCardParseResult *cardParseResult = [ACOAdaptiveCard fromJson:jsonStr];
if(cardParseResult.isValid){
renderResult = [ACRRenderer render:cardParseResult.card config:nil widthConstraint:335];
}
if(renderResult.succeeded)
{
ACRView *ad = renderResult.view;
ad.acrActionDelegate = self;
UIView *view = self.view;
view.autoresizingMask |= UIViewAutoresizingFlexibleHeight;
[self.view addSubview:ad];
ad.translatesAutoresizingMaskIntoConstraints = NO;
[NSLayoutConstraint constraintWithItem:ad attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:view attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0].active = YES;
[NSLayoutConstraint constraintWithItem:ad attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:view attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:3].active = YES;
}
}
- (void)didFetchUserResponses:(ACOAdaptiveCard *)card action:(ACOBaseActionElement *)action
{
if(action.type == ACROpenUrl){
NSURL *url = [NSURL URLWithString:[action url]];
SFSafariViewController *svc = [[SFSafariViewController alloc] initWithURL:url];
[self presentViewController:svc animated:YES completion:nil];
}
}
@end
--------------------------------------------------------------------------------
ViewController.swift
--------------------------------------------------------------------------------
import UIKit
import SafariServices
class ViewController: UIViewController, ACRActionDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let jsonStr = "{ \"type\": \"AdaptiveCard\", \"version\": \"1.0\", \"body\": [ { \"type\": \"Image\", \"url\": \"http://adaptivecards.io/content/adaptive-card-50.png\", \"horizontalAlignment\":\"center\" }, { \"type\": \"TextBlock\", \"horizontalAlignment\":\"center\", \"text\": \"Hello **Adaptive Cards!**\" } ], \"actions\": [ { \"type\": \"Action.OpenUrl\", \"title\": \"Learn more\", \"url\": \"http://adaptivecards.io\" }, { \"type\": \"Action.OpenUrl\", \"title\": \"GitHub\", \"url\": \"http://github.com/Microsoft/AdaptiveCards\" } ] }";
let cardParseResult = ACOAdaptiveCard.fromJson(jsonStr);
if((cardParseResult?.isValid)!){
let renderResult = ACRRenderer.render(cardParseResult!.card, config: nil, widthConstraint: 335);
if(renderResult?.succeeded ?? false)
{
let ad = renderResult?.view;
ad!.acrActionDelegate = (self as ACRActionDelegate);
self.view.autoresizingMask = [.flexibleHeight];
self.view.addSubview(ad!);
ad!.translatesAutoresizingMaskIntoConstraints = false;
NSLayoutConstraint(item: ad!, attribute: .centerX, relatedBy: .equal, toItem: view, attribute: .centerX, multiplier: 1.0, constant: 0).isActive = true;
NSLayoutConstraint(item: ad!, attribute: .centerY, relatedBy: .equal, toItem: view, attribute: .centerY, multiplier: 1.0, constant: 3).isActive = true;
}
}
}
func didFetchUserResponses(_ card: ACOAdaptiveCard, action: ACOBaseActionElement)
{
if(action.type == ACRActionType.openUrl){
let url = URL.init(string:action.url());
let svc = SFSafariViewController.init(url: url!);
self.present(svc, animated: true, completion: nil);
}
}
}