2013-12-11 96 views
0

我正在Xcode中工作,我有一個循環,其中我動態創建UIImageViews和UITextviews並將它們插入到UIScrollView。在每一行,我創建4周的UIImageViews和2個UITextViews,所以代碼如下所示:識別在循環中創建的UIImageView和UITextView iOS

for (int i=0; i<dim; i++){ 

    UITextView *textView1= [[UITextView alloc] initWithFrame:CGRectMake(0, 0, screenWidth/2, 37)]; 
    UITextView *textView2= [[UITextView alloc] initWithFrame:CGRectMake(screenWidth/2, 0, screenWidth/2, 37)]; 

    UIImageView *imageView1 = [[UIImageView alloc] initWithFrame:CGRectMake(0,50,screenWidth/4,100)]; 
    UIImageView *imageView2 = [[UIImageView alloc] initWithFrame:CGRectMake(screenWidth/4,50,screenWidth/4,100)]; 
    UIImageView *imageView3 = [[UIImageView alloc] initWithFrame:CGRectMake(screenWidth/2,50,screenWidth/4,100)]; 
    UIImageView *imageView4 = [[UIImageView alloc] initWithFrame:CGRectMake(screenWidth*3/4,50,screenWidth/4,100)]; 
} 

設置在UITextViews在UIImageViews的圖像,文本和顯示他們在UIScrollView中的代碼的偉大工程,我不張貼它,因爲它太長了。

我的問題是:當我點擊一個圖像時,我調用了我想對同一行的ImageViews和TextViews進行更改的方法,我如何識別它們?

檢測點擊的圖像不是使用recognitionizer.view,檢測同一行的其他圖像我試圖設置標籤的意見,然後調用「viewWithTag」找到它們,但我有問題,因爲同一行的元素具有相同的標記值,我會產生混淆。

我的目標是例如:

  • 當我在第一行中點擊imageView1應該改變形象imageView3同一行的。

  • 當我點擊imageView3在第四行應改變同一行textView2中的文本。

  • 等等..

有沒有在不使用標記屬性任何其他方法?

我希望我解釋自己

+0

這聽起來像你最好使用'UITableView'或'UICollectionView'來做你想做的事情。因爲這將允許您訪問特定行/索引處的單元格以及自定義單元格子類,您可以訪問圖像屬性。 – Evan

+0

@Evan插入一個UITextView到UITableViewCell中,如果你想對佈局進行細粒度的控制,就會要求一個痛苦的世界。我已經做到了,而且絕對有時候應該避免。它必須根據具體情況採取。 –

+0

@AbhiBeckert夠公平的。另一種選擇是製作一個'UIView'子類並將所有內容公開爲屬性。如果你想通過你的結構,你可以避免使用標籤。 – Evan

回答

1

你可以使用標籤屬性,但不要多次使用相同的標籤。一些小數學應該做的伎倆,以確定意見在同一行中的標籤...

但是: 我不會推薦使用標籤。讓自己成爲自定義視圖課程,例如MyRow,包含6個屬於子視圖的視圖。從那裏你可以去任何地方。

有問題,發明一個對象。始終有效。

BIGGER但是:我強烈推薦使用UICollectionViewUITableView

+0

好吧,我解決了。我做了一個包含所有其他視圖的視圖(針對每個循環)。因此,在用戶點擊圖像時調用的方法中,我只能在標籤標識的視圖中搜索imageView和textView。如果imageView具有相同的標籤,並且它們位於不同的「容器」中,則不存在任何問題。這並不難,但你幫助了我,謝謝! – lubilis

0

UIView有一個「標籤」屬性,你可以使用任何你想要的。默認值爲0,除存儲值外,它什麼都不做。

通常,您可以將標記設置爲數組索引。

所以,你可以這樣做:

textView1.tag = i; 
textView2.tag = i; 
imageView1.tag = i; 
imageView2.tag = i; 
imageView3.tag = i; 
imageView4.tag = i; 

也許更多的東西巧妙的,如:

textView1.tag = 1000000 + i; 
textView2.tag = 2000000 + i; 
imageView1.tag = 3000000 + i; 
imageView2.tag = 4000000 + i; 
imageView3.tag = 5000000 + i; 
imageView4.tag = 6000000 + i; 

或者,也許你可以有一個數組屬性映射它們:

@property NSMutableArray tagMap; 

textView1.tag = self.tagMap.count; 
[self.tagMap addObject:@{@"var": @"textView1", @"index":[NSNumber numberWithInteger:i]}]; 
+0

我已經認爲這個解決方案,但它更復雜。這些圖像是從網絡中獲取的,每個循環都有10個圖像,並且可以使用其他圖像更新滾動視圖。所以,如果我使用這種方法,在每一個循環中我都會有重複的標籤,並使混淆 – lubilis

+0

然後,您需要使用NSMutableArray作爲標籤的映射。例如,也許可以將URL存儲到數組中的圖像中。 –