/ / Мога ли да използвам свойства, за да определя класа на обект? - Objective-c, ios, uiview, свойства, подклас

Мога ли да използвам свойствата за определяне на класа на обект? - цел-c, ios, uiview, свойства, подклас

Имам персонализиран UITableViewCell, създаден в IB. въведете описанието на изображението тук

Всичките ми клетки ще имат това общо оформление. Въпреки това, в някои клетки, двата бели изгледа ще бъдат classA, а в други клетки двете бели изгледи ще бъдат classB. (И двата подкласа на UIView). Опитах се да присвоя специфичния подклас на двата изгледа, използвайки свойства.

Задавам двата изгледа като свойства на клетката

@property (nonatomic, retain) IBOutlet UIView *leftView;
@property (nonatomic, retain) IBOutlet UIView *rightView;

И според моя контролер, където правя таблицатаview, опитах се да създам обект от тип subclassA и да го присвоя като leftView, така че leftView ще бъде от тип subclassA. В други клетки щях да създам обект от подклас B и да го настроя на leftview, така че в тези клетки левият изглед да е от подклас b.

//equationTextField is a subclass of UIView
EquationTextField *textField = [[EquationTextField alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; // arbitrary frame
cell.leftView = textField;

Този код обаче не работи. Има ли по-добър начин да зададете специфичния клас на моите виждания?

Отговори:

0 за отговор № 1

Това, което правите, е добре, но може да искатепроучете наличието на два различни типа клетки (с вашите персонализирани изгледи вече вградени), за да подобрите ефективността - всеки може да има различен идентификатор за повторно използване, който бихте избрали в зависимост от пътя на индекса. Създаването на изгледи всеки път в cellForRowAtIndexPath никога не е добра идея.

Можете дори да извлечете и двата типа от една и съща клетка, просто използвайте различния идентификатор за повторно използване и добавете в правилните подкласове само при първо създаване на клетката.


0 за отговор № 2

Можете да проверите дали cell.leftView е вашето EquationTextField, ако е необходимо:

if([cell.leftView isKindOfClass:[EquationTextField class]]) {
NSLog(@"View is EquationTextField");
}
else {
NSLog(@"View is not EquationTextField");
}