我有一个从Xib加载其视图的View Controller,在这个Xib中,我有许多想要重用的子视图(例如在此视图和其他视图中使用的注释框)。由于我具有引用此视图的属性,因此必须进行更新,因此这有点棘手。目前的解决方案,完美无缺:
otherView.frame = currentView.frame;
[currentView removeFromSuperview];
[self setCurrentView:otherView];
[self.view addSubview:otherView];
但是,我需要为很多类做这个,所以我想我只是在UIViewController上创建一个类别来进行这个视图交换。
- (void)replaceViewProperty:(NSString *)property withNewView:(UIView *)newView {
SEL propertyMethod = NSSelectorFromString(property);
UIView *currentView = (UIView *) [self performSelector:propertyMethod];
newView.frame = currentView.frame;
[currentView removeFromSuperview];
[self performSelector:propertyMethod withObject:newView];
[self.view addSubview:newView];
}
然而,performSelector:withObject:call在这里是不正确的,因为虽然getter的名称是例如mySubView,然后setter将设置为myMySubview。显然我可以操纵字符串来完成这个任务,但我希望有一种更清晰,更稳定的方法来访问同一个ivar的getter和setter。想法?
答案 0 :(得分:0)
您可以使用KVC(键值编码)手动设置对象。在您的代码中,它看起来像:
[self setValue:newView forKey:property];
有关更多信息,请参阅the Apple docs on KVC。