К сожалению, расположение по умолчанию для кнопок на AdaptiveCards находится внизу карты, и вы не можете изменить это. Однако вы можете добавить изображение, стилизованное для карты, с помощью атрибута selectAction, который будет отправлять данные, связанные с действием, когда пользователь щелкает изображение. Для получения дополнительной информации см. Пример AdaptiveCard JSON ниже и документацию по AdaptiveCard для изображений и . Выберите Действия .
Скриншот
JSON
{
"type": "AdaptiveCard",
"body": [
{
"type": "TextBlock",
"size": "Large",
"weight": "Bolder",
"color": "Accent",
"text": "Company Name"
},
{
"type": "TextBlock",
"separator": true,
"size": "Medium",
"text": "Meeting Details"
},
{
"type": "TextBlock",
"text": "Description:"
},
{
"type": "TextBlock",
"text": "Keynote Speaker:"
},
{
"type": "TextBlock",
"text": "Date:"
},
{
"type": "Image",
"selectAction": {
"type": "Action.Submit",
"data": "Meeting 1"
},
"url": "C:\\Users\\v-thdurn\\Developer\\Node\\Azure\\thdurn-all-channels-src\\resources\\button.png"
},
{
"type": "TextBlock",
"separator": true,
"size": "Medium",
"text": "Meeting Details"
},
{
"type": "TextBlock",
"text": "Description:"
},
{
"type": "TextBlock",
"text": "Keynote Speaker:"
},
{
"type": "TextBlock",
"text": "Date:"
},
{
"type": "Image",
"selectAction": {
"type": "Action.Submit",
"data": "Meeting 2"
},
"url": "C:\\Users\\v-thdurn\\Developer\\Node\\Azure\\thdurn-all-channels-src\\resources\\button.png"
}
],
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"version": "1.0"
}
Надеюсь, это поможет!
Отсюда http://www.macosxguru.net/article.php?story=20030713184140267
- (id)getMyInstance
{
return myInstanceVar ;
}
или
- (id)getMyInstance
{
return [[myInstanceVar retain] autorelease] ;
}
В чем разница? Второй позволяет вызывающей стороне получить переменную экземпляра объекта-контейнера, утилизировать контейнер и продолжать играть с переменной экземпляра до следующего выпуска текущего пула с автоматическим выпуском, без ущерба для выпуска переменной экземпляра, созданной косвенно после освобождения его контейнера:
aLocalVar = [aContainer getAnInstanceVar] ;
[aContainer release];
doSomething(aLocalVar);
Если «get» реализован в первой форме, вы должны написать:
aLocalVar = [[aContainer getAnInstanceVar] retain];
[aContainer release];
doSomething(aLocalVar);
[aLovalVar release];
Первая форма немного более эффективна с точки зрения скорости выполнения кода. Однако, если вы пишете фреймворки, которые будут использоваться другими, возможно, следует рекомендовать вторую версию: она немного облегчает жизнь людям, использующим вашу фреймворк: им не нужно слишком много думать о том, что они делают…; ) Если вы выбираете первую версию стиля, четко указывайте ее в своей документации… Какой бы путь вы ни выбрали, помните, что переход с версии 1 на версию 2 экономит код клиента, а при переходе от версии 2 к версии 1 сломается существующий клиент код ...
Это не только для случаев, когда кто-то освобождает контейнер, так как в этом случае более очевидно, что они должны сохранить объект самостоятельно. Рассмотрим следующий код:
NSString* newValue = @"new";
NSString* oldValue = [foo someStringValue];
[foo setSomeStringValue:newValue];
// Go on to do something with oldValue
Это выглядит разумно, но если ни установщик, ни получатель не используют autorelease, то часть «Продолжай делать что-то», скорее всего, вылетит, потому что oldValue теперь освобожден (при условии, что никто другой не сохранил его). Вы обычно хотите использовать Технику 1 или Технику 2 от Apple '
Я не видел такой схемы раньше, но она кажется мне совершенно бессмысленной. Я предполагаю, что цель состоит в том, чтобы сохранить возвращаемое значение в безопасности, если клиентский код вызывает «release» для родительского объекта. На самом деле это ничего не ранит, но я сомневаюсь, что такая ситуация часто возникает в хорошо спроектированных библиотеках.
Ах, хорошо. Судя по документации, на которую ссылается smorgan, теперь это один из методов, которые Apple рекомендует сейчас использовать. Я думаю, что я все еще предпочитаю версию старой школы:
- (NSString *) value
{
return myValue;
}
- (void) setValue: (NSString *) newValue
{
if (newValue != myValue)
{
[myValue autorelease]; // actually, I nearly always use 'release' here
myValue = [newValue retain];
}
}