2013-12-11 46 views
0

我使用此代碼找到我iOS應用程序按標籤右側UIImageView和它的作品。查找的iOS的UIImageView和UITextView的按標籤

selectedView = ((UIImageView*)[self.view viewWithTag:x]); 

其中x是一個NSInteger。現在

,我與UIImageView相同標籤的UITextview

是否有一種方法只返回UIImageView或只有Textview這個標籤,而不是所有的Views

,如:

selectedImageView = ((UIImageView*)[... viewWithTag:x]); 

selectedTextView = ((UITextView*)[... viewWithTag:x]); 
+1

你爲什麼要使用兩個子視圖的標籤相同嗎? – rmaddy

+0

我有一個循環,我在其中創建圖像和textview動態。每一個形象,通過數據庫(它是一個INT)返回的意義單一的ID,所以我用這個值作爲標籤在我是 – lubilis

+0

哪一行這就是爲什麼使用標籤在這種情況下是脆性的認識。相反,使用實際的對象引用進行比較更加健壯。 – Abizern

回答

0

你可以這樣做:

- (id) viewWithTag:(NSUInteger) tag andClass:(Class) className 
{ 
    for(UIView* subview in [self.view subviews]) 
    { 
     if([subview isKindOfClass:className] && subview.tag == tag) 
     { 
      return subview; 
     } 
    } 

    return nil; 
} 
+0

這不會真的起作用。對'viewWithTag:'的調用將返回它找到的第一個子視圖和給定的標籤。如果它不是所需的視圖,則無法獲得所需的視圖。 – rmaddy

+0

所以,是不是有找到所有與該標籤不僅是第一的意見和方法? – lubilis

+0

檢查我更新的答案。我不是在這裏遞歸搜索,但是mabye對你來說已經足夠了。 –

0

不,你將需要使用不同的標籤每個視圖。

+0

真實的,但僅適用於viewWithTag。不需要有不同的標籤。 –

0

你總是可以編寫一個簡單的分類做你想要什麼。在你的情況下,像下面這樣的東西可能會起作用。

@interface UIView (MultitagSupport) 
- (NSArray *)viewsWithTag:(NSInteger)tag andClass:(Class)class; 
@end 

-

@implementation UIView (MultitagSupport) 

- (NSArray *)viewsWithTag:(NSInteger)tag andClass:(Class)class 
{ 
    NSMutableArray* matches = [NSMutableArray array]; 

    for (UIView* subview in self.subviews) 
    { 
     if (subview.tag == tag && [subview isKindOfClass:class]) 
     { 
      [matches addObject:subview]; 
     } 
    } 

    return [NSArray arrayWithArray:matches]; // return immutable copy for safety 
} 

@end 
0

你可以嘗試用謂詞過濾子視圖:

NSArray *foundImageViews = [self.view.subviews filteredArrayUsingPredicate: 
     [NSPredicate predicateWithFormat:@"tag = %d && class = %@", 1, 
     [UIImageView class]]]; 

這將返回所有的UIImageView子視圖標記 '1'