用新视图替换视图属性

时间:2011-09-07 19:12:55

标签: iphone objective-c

我有一个从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。想法?

1 个答案:

答案 0 :(得分:0)

您可以使用KVC(键值编码)手动设置对象。在您的代码中,它看起来像:

[self setValue:newView forKey:property];

有关更多信息,请参阅the Apple docs on KVC