我試過亞歷克斯的建議買UIViewController類別,它在模擬器,但不是在我的手機。這裏是類別
@interface UIViewController (parentSetter)
-(void)setParentUIViewController:(UIViewController*)parent;
@end
@implementation UIViewController (parentSetter)
-(void)setParentUIViewController:(UIViewController*)parent
{
_parentViewController = parent;
}
@end
它編譯和工作正常,但注意下劃線成員是有點偏離。 這是在針對3.0 SDK編譯時導致鏈接器錯誤的原因。
我有一個容器視圖,有2個子視圖,表是其中之一。該表需要一個父項,以便可以與導航欄進行交互等等。
我用這個方法,而不是去:
@interface AdoptedTableViewController : UITableViewController {
UIViewController* surrogateParent;
}
-(UINavigationController*)navigationController;
@property (nonatomic, assign) IBOutlet UIViewController *surrogateParent;
@end
@implementation AdoptedTableViewController
@synthesize surrogateParent;
-(UINavigationController*)navigationController
{
if([super navigationController])//self.navigationController)
{
return [super navigationController];
}
else
{
return surrogateParent.navigationController;
}
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
我所有的表視圖控制器現在adoptedTableViewControllers。他們需要父母的主要原因是他們可以將視圖控制器推到導航堆棧上,以便通過導航控制器獲取器進行透明處理。
這將是很好,如果parentViewController不只是只讀,但在我的涉足_parentViewController我發現有更多的ViewController層次結構不只是該屬性。我認爲這種關係中可能存在着許多耦合和責任,蘋果沒有爲羣衆清理足夠的空間。例如,當我向上移動我無法修復的導航層次結構時,我注意到一個奇怪的取消選擇行爲。也許UINavigation控制器反映他們的頂級控制器的類別,行爲有所不同?
總之,它確實是只讀的,沒有乾淨或簡單的解決方法。你只需要圍繞它構建。
我認爲誰投下每個答案在這個線程可以給出一個理由:) – willcodejavaforfood 2010-02-17 09:25:31
這不是我,但我懷疑他們不同意使用私人API,並投票下來使用私人API的建議似乎是在SO上通用。也許他們是蘋果痣。 – 2010-05-29 03:43:28