Как спроектировать вид с помощью componentKit в iOS
Я хочу создать собственное представление, используя componentKit
в objective-c
, представление выглядит как представление ленты новостей в facebook
приложение, я написал следующий код, чтобы сделать это представление,
+ (instancetype)newWithText:(NSString *)text
context:(QuoteContext *)context
{
return [super newWithComponent:
[QuoteWithBackgroundComponent
newWithBackgroundImage:[context imageNamed:@""]
quoteComponent:
[CKInsetComponent
newWithInsets:{.top = 10, .bottom = 10, .left = 10, .right = 10}
component:
[CKFlexboxComponent
newWithView:{}
size:{}
style:{
.direction = CKFlexboxDirectionVertical,
// .spacing = 10,
}
children:{
{
// Profile Picture
[CKImageComponent
newWithImage: nil
attributes:{
{@selector(setBackgroundColor:), [UIColor darkGrayColor]},
{CKComponentViewAttribute::LayerAttribute(@selector(setCornerRadius:)), 17.5}
}
size:CKComponentSize::fromCGSize(CGSizeMake(35, 35))],
},
{
// Name
[CKInsetComponent
newWithInsets:{ .right= 140, .top= -35}
component:
[CKLabelComponent
newWithLabelAttributes:{
.string = @"Asim Iftikhar Abbasi",
.font = [UIFont fontWithName:@"Baskerville" size:20],
}
viewAttributes:{
{@selector(setBackgroundColor:), [UIColor whiteColor]},
{@selector(setUserInteractionEnabled:), @NO},
}
size:{ }]],
.alignSelf = CKFlexboxAlignSelfEnd, // Right aligned
},
{
// Location
[CKInsetComponent
newWithInsets:{.right= 185, .top= -10}
component:
[CKLabelComponent
newWithLabelAttributes:{
.string = @"2 hrs Islamabad, Pakistan",
.font = [UIFont fontWithName:@"Baskerville" size:12]
}
viewAttributes:{
{@selector(setBackgroundColor:), [UIColor whiteColor]},
{@selector(setUserInteractionEnabled:), @NO},
}
size:{ }
]],
.alignSelf = CKFlexboxAlignSelfEnd, // Right aligned
},
{
// Post
[CKInsetComponent
newWithInsets:{.right= 0, .top= 0}
component:
[CKImageComponent
newWithImage: nil
attributes:{{@selector(setBackgroundColor:), [UIColor blackColor]},
}
size:CKComponentSize::fromCGSize(CGSizeMake(400, 200))]],
.spacingBefore = 10
},
{
// Buttons
[CKInsetComponent
newWithInsets:{.right= 0, .top= 15}
component:
[CKButtonComponent
newWithAction:{}
options:{
.titles = @"Hello",
.attributes = {{@selector(setHighlighted:), @YES}},
.titleColors = titleColors,
.selected = YES,
}]],
.spacingBefore = 10
},
}]]]];
}
@end
Я не могу получить доступ к атрибутам опций
options:{
.titles = @"Hello",
.attributes = {{@selector(setHighlighted:), @YES}},
.titleColors = titleColors,
.selected = YES,
}
когда я получаю доступ titles
атрибут button
Компилятор генерирует следующую ошибку:use of undeclared identifier titles
кто-нибудь, помогите мне, пожалуйста... Спасибо заранее
1 ответ
То, что ComponentKit ожидает от вас здесь, это не одна строка, а карта между UIControlState
s и строки, так что вы можете определить различные строки для UIControlStateNormal
, Highlighted
, Disabled
и тому подобное. Это вы можете указать как:
.titles = {{UIControlStateNormal, @"Hello"}}
Однако, если вас не волнуют другие состояния, у карты есть другой конструктор, который по умолчанию принимает нормальное состояние, которое должно работать следующим образом:
.titles = {@"Hello"}
Надеюсь, это поможет!