2012-06-20 37 views
0

如果用戶提供一個數字(如8),我將如何在視圖上放置八個標籤?如何在視圖上放置「x」個對象

例如:

int userGivenNumber = textfield.text; 

for (int labelNumber=1; i<=userGivenNumber; i++) { 

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, *previousLabel*.frame.origin.y + 20)]; 

} 

你將如何得到previousLabel位置?此外,如果用戶想要編輯標籤,如標籤3,我將如何編輯此標籤?

問題是,我不知道他們想在編碼時放置多少個標籤,而且我也沒有辦法跟蹤標籤,因爲它們被稱爲label。你有什麼想法?你明白我在問什麼嗎?謝謝你的幫助。

回答

3
- (void)addLabels { 

    CGFloat offset = 0; 

    // labels is NSMutableArray property 

    labels = [[NSMutableArray alloc] initWithCapacity:8]; 

    for (int i = 0; i < 8; i++) { 
     UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, offset, 320, 20)]; 
     [self.view addSubview:label]; 
     [labels addObject:label]; 

     offset += label.frame.size.height; 
    } 

} 

編輯:像jerrylroberts說,訪問來自於你的代碼的其他地方的標籤數組,你應該把它聲明爲一個屬性。

+1

yup,並且由於標籤的數量不同,您可以簡單地將該數組設置爲:NSMutableArray * labels = [[NSMutableArray alloc] initWithObjects:nil];並添加他們,因爲你創造他們不擔心你的限制(很多)。 –

+2

你也可以初始化CGRectMake(0,i * 20,320,20)' – eazimmerman

+1

這個代碼的唯一問題是你的可變數組只是一個變量而不是一個屬性,這意味着它不可訪問到其他領域的觀點。我敢打賭,他會想要在他的視圖的其他部分訪問這些標籤 – jerrylroberts

0

只保留對循環外部位置(CGPoint)的引用,但將其在循環內更新爲當前標籤的位置。當您分配下一幀時,請根據標籤的寬度和大小進行操作,並且不要忘記更新CGPoint的參考。

1

所以,你可以添加意見,像這樣:

int userGivenNumber = [textfield.text intValue]; 

for (int labelNumber=1; i<=userGivenNumber; i++) { 

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, *previousLabel*.frame.origin.y + 20)]; 

    [self.view addSubview:label]; 

    [label release]; 

} 

如果你想保持對它們的跟蹤,你可以只創建一個可變數組的屬性,然後每個標籤添加到陣列添加到前子視圖;

接口

@property (nonatomic, retain) NSMutableArray *addedLabels; 

實施

@synthesize addedLabels=_addedLabels; 

- (void)viewDidLoad 

    [super viewDidLoad]; 

    // Create your array to hold labels 

    NSMutableArray *addedLabels = [[NSMutableArray alloc] initWithCapacity:0]; 

    self.addedLabels = addedLabels; 

    [addedLabels release]; 

    // NOW put your code 

    int userGivenNumber = [textfield.text intValue]; 

    for (int labelNumber=1; i<=userGivenNumber; i++) { 

     UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, *previousLabel*.frame.origin.y + 20)]; 

     [self.view addSubview:label]; 

     [addedLabels addObject:label]; 

     [label release]; 

    } 
} 

現在,您可以輕鬆地訪問,如果你有索引添加了任何標籤。希望這有助於幫助

相關問題