OC

Knowledge OS
登录 注册
全部话题 移民 创业 iOS Mac Objective-C Swift Android 招聘 求职

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

yuprxk
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,我怎么才能不这么笨拙进行类型转换,求教。 
共4条回复
楼长 ·
adad184 回复于 2014年10月14日
UISwitch *sw = (UISwitch*)cell.accessoryView;
2楼 ·
yuprxk 回复于 2014年10月15日

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

if (@"UISwitch" isEqaulString) {

} else if (@"UIButton" isEqaulString ) {

} else if (@"UILabel" isEqaulString {

}

3楼 ·
adad184 回复于 2014年10月15日

2楼 @yuprxk

 if ( [UISwitch class] == cell.accessoryView.class )
4楼 ·
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 ,来区分是目前比较好的办法。
登录 或者 注册

AltStyle によって変換されたページ (->オリジナル) /