2011-09-07 45 views
0

我有一個視圖控制器從Xib加載它的視圖,並且在這個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:調用不正確,在這裏,因爲當吸氣的名稱是如mySubView,setter將被setMySubview。顯然,我可以操縱字符串來完成這項任務,但我希望有一種更清晰,更穩定的方式來訪問同一個伊娃的獲取者和設置者。想法?

回答

0

您可以使用KVC(鍵值編碼)手動設置對象。在你的代碼,它看起來是這樣的:

[self setValue:newView forKey:property]; 

欲瞭解更多相關信息請參見the Apple docs on KVC

+0

完美。我之前已經瞭解了這一點,但從未使用它。好吧,現在我會!謝謝! –