2014-03-06 29 views
0

我第一次,我希望這不僅是我的問題。改變數組中所有對象的屬性的for-loop問題

最重要的是,我創建並完成了所有沒有.nib,.xib或storyboard的東西,而且對於Xcode來說是相當新的東西。

問題描述:

我創造了一系列的標籤,即進入一個陣列中的所有程序的。

int i低於或等於4否則它不會觸發。

int i = (int)[players count]; 

if (i<=4) { 

    nameLabel = [[UILabel alloc]initWithFrame:CGRectMake(self.view.bounds.size.width-(self.view.bounds.size.width/3)-20*widthmultiplayer, self.view.bounds.size.height-((50*heightmultibplyer)*i)-50*heightmultibplyer, (self.view.bounds.size.width/3), 50*heightmultibplyer)]; 
    nameLabel.text = enterName.text; 

    [nameLabel setFont:[UIFont fontWithName:@"Arial-BoldMT" size:fontSize]]; 
    [nameLabel setTextAlignment:NSTextAlignmentRight]; 
    [self.view addSubview:nameLabel]; 
    players[i] = nameLabel; 
    NSLog(@"index: %i , name:%@", i, nameLabel.text); 

    enterName.text = @""; 
} 

然後以編程方式隱藏所有標籤與下面的代碼

for (UILabel *label in players) { 
    label.hidden = YES; 
} 

現在有趣的部分 - 當我想告訴他們再次使用

for (UILabel *label in players) { 
    label.hidden = NO; 
} 

它不顯示最後一個條目。

含義:

  • 如果我只有1項就說明沒有
  • 如果我有3項只顯示2
  • 等等等等...

有趣的是我的數組日誌顯示所有對象,顯示每個對象的正確索引和隱藏狀態爲false(-so它應該是什麼)。

試圖通過

[self.view bringSubviewToFront:label] 

帶來了看法正面但不會正常工作。

我不明白爲什麼。關於我做錯什麼的答案和提示將不勝感激。

---- ----編輯我 找到一個解決辦法,以我的問題,也許這可以幫助別人: 我一點點做這個改變的隱藏價值的變化:

 for (UILabel *label in players) { 
     [label removeFromSuperview]; 
     label.hidden = NO; 
     [self.view addSubview:label]; 
    } 

外觀俗氣,俗氣,但起作用。 如果有人可以幫助我找到解決方案或重大缺陷,我會非常喜歡它。

+0

@Anna感謝名單編輯 – Belraim

+0

爲什麼的原因的原因你是否將返回值轉換爲整數?這在構建32位和64位時可能會導致問題。 – Joride

+0

您是否記錄了'int i =(int)[players count]'? –

回答

0

好吧,我工作的整個理論部分在這個問題上,我得到的結果是,它工作正常,沒有任何問題

這裏是我用來測試

players=[[NSMutableArray alloc]initWithCapacity:3]; 


for (int k=0; k<10; k++) { 
    NSLog(@"%@",NSStringFromCGRect(CGRectMake(self.view.bounds.size.width-(self.view.bounds.size.width/3)-20*widthmultiplayer, self.view.bounds.size.height-((50*heightmultibplyer)*k)-50*heightmultibplyer, (self.view.bounds.size.width/3), 50*heightmultibplyer))); 

} 
int i=0; 
CGRect rect=CGRectMake(self.view.bounds.size.width-(self.view.bounds.size.width/3)-20*widthmultiplayer, self.view.bounds.size.height-((50*heightmultibplyer)*i)-50*heightmultibplyer, (self.view.bounds.size.width/3), 50*heightmultibplyer); 
NSLog(@"%@",NSStringFromCGRect(rect)); 
nameLabel = [[UILabel alloc]initWithFrame:rect]; 
[nameLabel setBackgroundColor:[UIColor blueColor]]; 
[nameLabel.layer setBorderColor:[UIColor blackColor].CGColor]; 
[self.view addSubview:nameLabel]; 
players[0] = nameLabel; 


i=1; 
nameLabel = [[UILabel alloc]initWithFrame:CGRectMake(self.view.bounds.size.width-(self.view.bounds.size.width/3)-20*widthmultiplayer, self.view.bounds.size.height-((50*heightmultibplyer)*i)-50*heightmultibplyer, (self.view.bounds.size.width/3), 50*heightmultibplyer)]; 
[nameLabel setBackgroundColor:[UIColor redColor]]; 
[nameLabel.layer setBorderColor:[UIColor blackColor].CGColor]; 

[self.view addSubview:nameLabel]; 

players[1] = nameLabel; 
NSLog(@"%@",players); 
i = (int)[players count]; 
if (i<=4) { 
    NSLog(@"%@",players); 
    nameLabel = [[UILabel alloc]initWithFrame:CGRectMake(self.view.bounds.size.width-(self.view.bounds.size.width/3)-20*widthmultiplayer, self.view.bounds.size.height-((50*heightmultibplyer)*i)-50*heightmultibplyer, (self.view.bounds.size.width/3), 50*heightmultibplyer)]; 
    [nameLabel setBackgroundColor:[UIColor greenColor]]; 
    [nameLabel.layer setBorderColor:[UIColor blackColor].CGColor]; 
    [self.view addSubview:nameLabel]; 
    players[i] = nameLabel; 
    NSLog(@"index: %i , name:%@", i, nameLabel.text); 

    NSLog(@"%@",players); 
}  
for (UILabel *label in players) { 
    label.hidden = YES; 
} 
NSLog(@"%@",players); 
for (UILabel *label in players) { 
    label.hidden = NO; 
} 

NSLog(@"%@",players); 

現在的解釋代碼可能出錯了。這種情況下可以occour原因在於添加到陣列標籤的一個不添加到視圖。那就是當你重新添加它原來是工作

+0

是真的,但我的主要問題是...更長的解釋:我創建了標籤,讓我們說viewNr1,並且它們都顯示出來。當我切換到viewNr2。並隱藏它們,切換回viewNr1。並取消隱藏他們,一個人失蹤。因爲我只是隱藏「視圖」,所以它實際上是一系列位於彼此之上的視圖,並且根據需要隱藏,隱藏。 – Belraim

+0

雖然我的問題只在解決方法中起作用,但對於遇到類似問題的人來說,解釋是最好的,但請務必檢查您是否正確添加了子視圖!謝謝,如果我想出更詳細的描述或陷入陷阱,我會更新這個。 – Belraim

0

NSArray索引從0開始。您必須從0到[players count] - 1

+0

陣列播放器有正確的條目 - 第一個有0 - 肯定是因爲玩家數爲0是空的,比我添加一個條目,所以計數是1,下一個需要的索引也是1,如果我將索引設置爲[players count] -1比我總是覆蓋前一個條目並且永遠不會超過1的計數。 – Belraim

+0

正在使用NSArray(不是NSMutableArray)。如果你是,你最後添加了一個零對象嗎? –

+0

然後我誤解了你的代碼。當相關評論不再重要時,我會刪除我的答案。如果你展示了「球員」的聲明,我會很好。 – user3071962

相關問題