У меня есть приложение для iOS с циклом for, которое создает, настраивает и добавляет пользовательский контроллер представления в мое представление.Проблема в том, что мне нужно динамически установить для объекта UIViewController
правильный класс, в зависимости от номера текущего цикла.Вот мой код:
// Loop through the data and setup the switches.
for (NSUInteger loop = 0; loop < [switchLabels count]; loop++) {
// Create the view controller object.
UIViewController *screen;
// Create the custom switch view.
if (loop < 3) {
screen = [[CustomSwitchView alloc] initWithNibName:@"CustomSwitchView" bundle:nil];
} else {
screen = [[CustomTripleSwitchView alloc] initWithNibName:@"CustomTripleSwitchView" bundle:nil];
}
// Create the custom switch view.
[screen setPassedInType:switchTypes[loop]];
[screen setDelegate:self];
[self addChildViewController:screen];
[screen.view setFrame:CGRectMake((self.view.frame.size.width - 150), ((UILabel *)switchLabels[loop]).frame.origin.y, 144, 72)];
[scrollTopView addSubview:screen.view];
[screen didMoveToParentViewController:self];
[screen setTitles:switchTitles[loop] state:[switchSettings[loop] boolValue]];
}
Проблема в том, что некоторые из приведенных выше вызовов методов приводят к ошибке:
Нет видимого @interface для 'UIViewController' объявляет селектор....
Чтобы решить эту проблему, мне нужно набрать объект cast screen
.Однако мне нужно динамически набрать приведение типа, основываясь на номере цикла for:
Если цикл меньше 3, мне нужно набрать приведение объекта к CustomSwitchView
, в противном случае мне нужно набрать приведение типаCustomTripleSwitchView
.Как я могу сделать это inline?Например, я попробовал приведенный ниже код, но он не сработал:
(loop < 3 ? (CustomSwitchView *) : (CustomTripleSwitchView *))
Спасибо за ваше время, Дэн.