2012-07-03 22 views
0

我花了數小時,我無法弄清楚這一點。我有其在此處發起的細節視圖控制器(UITableView的):Superview第二次發佈視圖控制器後無效

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    EventLocationDetailController *newDetailViewController = [[EventLocationDetailController alloc] initWithNibName:@"EventLocationDetailController" bundle:nil]; 
    self.eventDetailController = newDetailViewController; 
    [self.navigationController pushViewController:self.eventDetailController animated:YES]; 

    [newDetailViewController release]; 

} 

在詳細視圖中控制器有它調用以下方法來顯示的按鈕的方法的滑動式-滑出動畫確認用戶選擇:

-(void)confirmLastActionWithMessage:(NSString *)message { 

ConfirmActionViewController *newConfirmActionViewController = [[ConfirmActionViewController alloc] initWithNibName:@"ConfirmActionViewController" bundle:nil]; 
self.confirmActionViewController = newConfirmActionViewController; 
[newConfirmActionViewController release]; 

[[self.view superview] addSubview:self.confirmActionViewController.view]; 

}

協議的方法由ConfirmActionViewController指示動畫完成調用。

-(void)didFinishConfirmDisplay:(UIView *)viewToRemoveFromSuperview { 

    [viewToRemoveFromSuperview removeFromSuperview]; 
} 

這工作完美,我第一次按下按鈕。如果我彈出細節控制器並將它重新推回堆棧並再次按下按鈕,則不會發生任何事情,並且細節控制器的超級視圖在每次調用該方法後均爲零。只有當它到達confirmLastActionWithMessage方法時,Superview纔會在詳細視圖的viewWillAppear方法中爲零。之間沒有其他用戶交互發生。我如何獲得超視圖?我有一個沒有動畫的類似代碼。

我也注意到,當彈出堆棧時,詳細視圖控制器沒有調用dealloc。不確定問題出在哪裏。

謝謝。

編輯1

好的。我用這個替換了addSubview行:

[self.view insertSubview:self.confirmActionViewController.view atIndex:0];

並且動畫視圖出現在其中一個表格單元下面。其中一個表格單元是否可以竊取超級視圖?

+0

你的房產是什麼樣的?具體來說,你是否在屬性中添加了自定義邏輯? – mydogisbox

+0

@property(nonatomic,retain)ConfirmActionViewController * confirmActionViewController; –

+0

執行,而不是聲明。你有'@綜合'或其他什麼? – mydogisbox

回答

0

嗯,我不明白爲什麼你應該將子視圖添加到超級視圖。爲什麼不加它只是爲了self.view

我可能無法解釋爲什麼沒有上海華盈,但嘗試要麼添加控制器以self.view或

[[[[UIApplication sharedApplication] delegate] window] addSubview:yourview]; 

這將在渲染視圖一切的頂部。

+0

我試過了,但由於視圖底部的工具欄,我不得不調整動畫的起點。動畫將出現在其他視圖中 - 帶和不帶工具欄。我希望代碼可以是便攜式的,並且可以在不計算屏幕底部每次使用的位置的情況下啓動動畫。看起來這可能是唯一的選擇,如果我沒有得到另一個答案。謝謝。 –

+0

用可能的情況創建一個新的枚舉,您必須使用工具欄,不帶工具欄和導航欄等來計算動畫的起始點。然後修改方法' - (void)confirmLastActionWithMessage:(NSString *)message'來獲取該枚舉類型的額外參數並計算開關塊內的起始點。在調用該方法時根據需要傳遞參數。這將使你的代碼更加便攜。 – tGilani

相關問題