2011-03-17 33 views
1

我發現此代碼(用appdelegate爲應用程序編寫)。我只想讓它支持更多的視圖(我創建它)。修改此代碼以支持另一個視圖

的代碼:

- (IBAction)swap 
{ 
    NSArray *subs = [window subviews]; 
    [[subs objectAtIndex:0] removeFromSuperview]; 
    if([subs objectAtIndex:0] == view2){ 
     [window addSubview:view1]; 
    } else if([subs objectAtIndex:0] == view1){ 
     [window addSubview:view2]; 
    } 
} 
+0

你已經試過了什麼? – 2011-03-17 20:11:58

+0

如果使用addSubview:view3,我寫了第二個else,但它沒有工作:( – 2011-03-17 20:16:35

+0

但它應該做什麼?目標是什麼?現在它只是刪除第一個視圖並交換一個新視圖(交換view1與view2和viceVersa)。 ..你的意思是它沒有工作,或者你想要做別的事情?以及什麼,以防萬一?請更好地解釋它,請......在3個視圖之間切換? – meronix 2011-03-17 20:31:29

回答

0
- (IBAction)swap 
{ 
    NSArray *subs = [window subviews]; 
    UIView *currentView = (UIView *)[subs objectAtIndex:0]; 
    [currentView removeFromSuperview]; 
    if(currentView == view1){ 
     [window addSubview:view2]; 
    } else if(currentView == view2){ 
     [window addSubview:view3]; 
    } else 
     [window addSubview:view1]; 
    } 
} 
+0

偉大和thx另一個問題,當我使用它應該我做一些內存管理或它工作正常? – 2011-03-17 20:31:01

+0

@ Bobj-C你的內存管理應該罰款在上面的方法,因爲你沒有創建任何東西(只是工作因爲你已經在其他地方創建了這些視圖,所以一定要在你的dealloc中釋放它們。 – theChrisKent 2011-03-17 20:32:59

1

假設觀點1,2和3是唯一的視圖 -

- (IBAction)swap 
{ 
    [window sendSubviewToBack:[[window subviews] lastObject]]; 
} 

或者,扭轉方向

- (IBAction)swap 
{ 
    [window bringSubviewToFront:[[window subviews] objectAtIndex:0]]; 
} 
0

如果你不想用IF ELSE來折磨自己使用一系列視圖並遍歷它們。

NSArray *myViews = [NSArray arrayWithObjects:view1, view2, view3, nil]; 

NSInteger nextIndex = [myViews indexOfObject:[[window subviews] objectAtIndex:0]] + 1; 

nextIndex = (nextIndex % [myViews count]); // to loop around if reached the end 
[window addSubview:[myViews objectAtIndex:nextIndex]]; 

你可以做一些聰明的意見數組,這樣你就不會在每次交換時重新創建。

+0

謝謝,如果我想爲View2製作一個特殊的類來放入它的方法。 .. 我該怎麼辦 ? – 2011-03-17 20:42:37

相關問題