英语轻松读发新版了,欢迎下载、更新

救助 iOS关于动态类型的问题

yuprxk 发布于 2014年10月14日
无人欣赏。
    typeof(cell.accessoryView) control = cell.accessoryView;
    [(UIControl *)control addTarget:self action:@selector(dayOrNightChanged) forControlEvents:UIControlEventValueChanged];
    if ([control respondsToSelector:@selector(onTintColor)]) {
        if ([@"UISwitch" isEqualToString:classString]) {
            ((UISwitch *)control).onTintColor =  [UIColor blueColor];
        }
    }
cell.accessoryView 实际上是一个UISwitch,我怎么才能不这么笨拙进行类型转换,求教。 
共5条回复
adad184 回复于 2014年10月14日
UISwitch *sw = (UISwitch*)cell.accessoryView;
yuprxk 回复于 2014年10月15日

如果事先只能从别处取得 字符串 @"UISwitch",我应该怎么进行类型转换,如果control 是UIButton类型呢?我不可能

if (@"UISwitch" isEqaulString) {

} else if (@"UIButton" isEqaulString ) {

} else if (@"UILabel" isEqaulString {

}

adad184 回复于 2014年10月15日

2楼 @yuprxk

 if ( [UISwitch class] == cell.accessoryView.class )
Hector 回复于 2014年10月15日

2楼 @yuprxk

怎么会有这么奇怪的情况。。。如果有,好像只能 if else 了

yuprxk 回复于 2014年10月15日
UITableViewCell *cell = nil;

cell.accessoryView 是根据configuration.plist配件文件来确定的
//configuration.plist部分内容
cell0
accesrroyView UIStepper

cell1
accesrroyView UISwitch

cell2
accesrroyView UIButton

cell3
accesrroyView UILabel

NSString *classString = plist[@"accessoryView"];
UIView *accessoryView = [[NSClassFromString(classString) alloc] init];
cell.accessoryView = accessoryView;
各种控件的属性有些差异,看来用if else if ,来区分是目前比较好的办法。
登录 或者 注册